PDA

Visualizza la versione completa : [C] allocazione memoria esterno - free


FreeManX
01-02-2013, 12:13
Ciao a tutti,
il mio C è un po arrugginito, mi sono troppo abituato bene con Java :-)

Volevo chiedervi una delucidazione se è necessario esplicitamente fare il free oppure no di una variabile, nel caso sotto descritto:



....
for (.....) {
char *myString;
call_extern_function(myString);
}
...


In questo snippet, la memoria di myString viene allocata (malloc, non in mio potere) dalla funzione esterna.

E' corretto che alla fine del ciclo "myString" esce fuori scope, quindi la memoria viene liberata, oppure il fatto che il malloc avvie altrove, devo preoccuparmi di fare un "free" prima di uscire dal ciclo?

Grazie
Alfredo :D

oregon
01-02-2013, 12:22
Se la free non la fa la stessa funzione, la devi fare tu.

Il fatto che il puntatore esca dallo scope non vuol dire che la memoria puntata venga liberata, anzi, è anche peggio dato che dopo non avrai più il puntatore alla memoria e questa diventerà irraggiungibile (con conseguente grave memory leak).

FreeManX
01-02-2013, 13:07
Grazie per il chiarimento.

Alfredo

MItaly
01-02-2013, 14:55
Verifica però se la libreria non fornisce una sua versione della free: altrimenti, se il tuo eseguibile e la libreria usano due copie diverse della CRT, vai a cercare di liberare nel tuo heap memoria allocata in un altro heap.

Loading