Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Dubbio con realloc linguaggio c

    alve non ho capito bene una cosa.
    Usando realloc in questo modo (cioè per diminuire lo spazio allocato
    precedentemente con malloc) i dati che avevo salvato nel vettore
    restano disponibili ??
    E' corretto usare realloc per conservare una parte del vettore e
    liberare l' altra ?.
    in questo caso non funziona perchè ??

    #include <stdio.h>
    #include <stdlib.h>

    int main() {
    int *values = NULL ;
    int capacity;
    int i = 0;

    printf("Inserisci il numero di elementi da creare... ");
    scanf("%d",&capacity);

    values= (int *)malloc(capacity*sizeof(int));
    if(values == NULL){
    printf("Memoria non disponibile....");
    }

    for(i=0;i<capacity;i++){

    printf("Inserisci il %d^ elemento : ",i+1);

    scanf("%d",&values[i]);
    }

    printf("Digitare il numero di elementi da mantenere : ");
    int nn;
    scanf("%d",&nn);

    values = (int*)realloc(values,(nn)*sizeof(int));

    if(values== NULL){
    printf("Memoria non disponibile....");
    }
    getchar();
    getchar();
    return 1
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: Dubbio con realloc linguaggio c

    Originariamente inviato da Giulian2
    in questo caso non funziona perchè ??
    Cioè? Perchè dici che non funziona?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ciao grazie per l' attenzione io volevo fare semplicemnte questo esercizio :

    Scrivere un programma che dato un vettore di dimensione specificata dall' utente e formato da elementi inseriti dal medesimo utente, si chiede di ridemensionare la sua dimensione ai primi "n" elementi (specificati dall' utente).

    Ex se v={7,9,11,12} e si voglio mantenere solo i primi n=3, allora v diventa v={7,9,11}
    riducendo la memoria utilizzata.

    Nel caso del programma che ho fatto io usando realloc in quel modo (cioè riduco lo spazio allocato per il vettore di int) libero veramente parte della memoria allocata per il vettore??
    e se si cosa succede hai dati che prima erano allocati nel vettore e dopo non lo sono più ??

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Giulian2
    Nel caso del programma che ho fatto io usando realloc in quel modo (cioè riduco lo spazio allocato per il vettore di int) libero veramente parte della memoria allocata per il vettore??
    Sì ... ok ...

    e se si cosa succede ai dati che prima erano allocati nel vettore e dopo non lo sono più ??
    Nulla ... sono sempre in memoria, ma dato che quello spazio non è allocato per il vettore, non sono presi in considerazione ...

    Ma non hai detto perchè dici che non funziona ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Grazie ora ho capito !!
    Dicevo che non funzionava perchè dopo aver usaro realloc e quindi aver ridotto la dimensione del vettore, se provavo a stampare il contenuto del vettore, facendo in modo che vennissero stampati anche i dati che non erano più allocati in memoria, essi veniva stampati come se il vettore non fosse stato modificato.
    Facevo il tutto con un ciclo for che scorresse il vettore di int.
    Credo che questo dipenda dal fatto che il realloc dealloca la memoria ma non la sovrascrive, nel caso quindi se cerco di accedere ai vecchi dati del vettore (dove è stato deallocato) sono sempre accedibili, non essendo però parte della memoria allocata.

    Forse non sono stato molto chiaro....scusa l' ora....se vuoi posso provare a chiarimi meglio.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Giulian2
    Credo che questo dipenda dal fatto che il realloc dealloca la memoria ma non la sovrascrive
    Esatto ...

    nel caso quindi se cerco di accedere ai vecchi dati del vettore (dove è stato deallocato) sono sempre accedibili, non essendo però parte della memoria allocata.
    Quasi ... i dati "potrebbero" essere ancora accedibili (e normalmente è così) ... oppure, potresti trovare valori completamente diversi (perchè la memoria è stata riservata ad altri scopi ed utilizzata in altro modo), oppure ancora, potresti avere un errore perchè, per vari motivi, lo spazio degli indirizzi non appartiene piu' al processo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Grazie tante !!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.