PDA

Visualizza la versione completa : [C] Allocazione dinamica con passaggio di puntatori


ilmo lesto
04-11-2007, 20:48
Semplificando di molto il concetto che voglio esprimere...



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

#define SIZE

int *allocFunc (void){

int *data = NULL;

data = (int*) malloc( sizeof(int) * SIZE);

return data;
}

int main(){

int *mydata;

mydata = allocFunc();

............

free(mydata);

return 0;
}


in questo caso devo utilizzare free per deallocare il puntatore data all'interno della funzione allocFunc? Mi verrebbe da dire di no visto che il puntatore muore quando esco dalla funzione... o mi sbaglio?

menphisx
04-11-2007, 20:56
Originariamente inviato da ilmo lesto
Semplificando di molto il concetto che voglio esprimere...



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

#define SIZE 1 /*prima era vuoto*/

int *allocFunc (void){

int *data = NULL;

data = (int*) malloc( sizeof(int) * SIZE);
/*Controllo sulla memoria allocata*/
if(data == NULL){
printf("Errore allocazione");
exit(1);
}

return data;
}

int main(){

int *mydata = NULL;

mydata = allocFunc();

............

free(mydata);
mydata = NULL;

return 0;
}


Ho corretto un po' il codice


in questo caso devo utilizzare free per deallocare il puntatore data all'interno della funzione allocFunc? Mi verrebbe da dire di no visto che il puntatore muore quando esco dalla funzione... o mi sbaglio?
corretto

shodan
04-11-2007, 21:01
Il puntatore - data - muore all'interno della funzione allocFunz, ma il blocco di memoria ad esso associato viene trasferito a - mydata - sul quale poi userai la free.

Immagina che il blocco di memoria sia un palloncino e il suo puntatore il filo.
Se non vuoi che il palloncino scappi, devi sempre tenerlo legato in qualche modo.

Samuele_70
04-11-2007, 21:03
Se deallochi la memoria puntata da data nella funzione allocFunc,
la stessa diventa inutile.


Si la variabile puntatore diciamo che 'muore' quando termina la funzione,
ma a noi non serve la variabile ma solo il suo valore...

ilmo lesto
04-11-2007, 21:10
grazie a tutti per le risposte, tutto chiaro!

P.S. il codice l'ho scritto di getto ed era a titolo esemplificativo... per quello pieno di inesattezze...

Loading