Quote:
Originariamente inviato da Unrue
Ciao a tutti,
ho un vuoto di memoria nel C nelle funzioni che ritornano puntatori
Immagino che fare così sia scorretto:
Codice:
int*func(){
int var;
return &var
}
Perché var è locale, e si perderebbe una volta usciti dalla funzione.
Così invece dovrebbe essere corretto:
Codice:
int*func(){
int*vect=malloc(100*sizeof(int));
return vect
}
Giusto? Ma vect non è comunque locale? Che dubbio stupido.. 
|
Codice:
int*func(){
int*vect=malloc(100*sizeof(int));
return vect
}
Così ritorni un puntatore a un array di 100 int. La memoria allocata con malloc è allocata sullo HEAP che non è toccato dalle chiamate di funzione , quindi anche quando func() ritornerà la memoria rimarrà sempre allocata e potrai accedervi dal puntatore ritornato da func() , questa verrà deallocata solo alla chiusura del programma o se esplicitamente deallocata con "free()".
La variabile vect invece in func verrà eliminata perchè è una variabile automatica allocata sullo Stack.
Ciao