View Single Post
Old 30-08-2011, 18:19   #2
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da Unrue Guarda i messaggi
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
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso