|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2002
Messaggi: 1334
|
Strutture e calloc
Salve,
ho una struttura in cui appaiono dei puntatori inizialmente impostati a NULL e che poi vengono eventualmente assegnati ad aree di memoria tramite calloc durante l'esecuzione del programma. A volte ho la necessità di deallocare alcune istanze di questa struttura: io so che per farlo bisogna usare la funzione free(). Fin qui nessuno problema: mi sorge però un tremendo dubbio: se faccio free(nomeIstanzaStruttura) viene deallocata l'istanza della struttura... ma anche le aree di memoria puntate dai puntatori o solo gli spazi di memoria in cui è memorizzato il valore del puntatore? |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
guarda, la funzione free ha questo prototipo:
void free (void *ptr) quindi a tale funzione non devi passare l'istanza direttamente ma un puntatore a quella istanza. quindi deevi creare n puntatore al tuo oggetto e quindi passarlo alla free per deallocare la memoria occupata. cmq per la domanda che hai fatto puoi star tranquillo che non verranno distrutti anche gli altri oggetti puntati dall'oggetto che hai cancellato, altrimenti in una lista se cancelli il primo elemento poi li cancelleresti tutti... ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La free non è ricorsiva...
Ti faccio un esempio... struct s { char a[30]; int *c; }; Se c è stato allocato con calloc o malloc la free su s non libera la memoria puntata da c... Devi prima delallocare c e poi s.... |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Aug 2002
Messaggi: 1334
|
Quote:
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:40.