View Full Version : [c]=deallocazione array di puntatori a caratteri
mercury841
11-07-2006, 11:22
se ho un array di puntatori a carattere in cui l'ultimo elemento punta a NULL, per deallocarlo va bene questa funzione:
void dealloca(char **array_di_stringhe){
int i=0;
while ( array_di_stringhe[i] != NULL ){
free(array_di_stringhe[i]);
i=i+1;
}
free(array_di_stringhe[i]);
free(array_di_stringhe);
return;
}
ciao e grazie per l'aiuto.
sottovento
11-07-2006, 11:55
Come mai fuori dal ciclo c'e' un
free(array_di_stringhe[i]);
?
mercury841
11-07-2006, 11:58
non so se serve, l'ho messo per deallocare l'ultimo puntatore a NULL.
grazie per la pazienza,ciao
sottovento
11-07-2006, 12:03
non so se serve, l'ho messo per deallocare l'ultimo puntatore a NULL.
grazie per la pazienza,ciao
Well, veramente il puntatore a NULL non andrebbe deallocato. Farlo comporta un crash (non sempre succede).
Il mio consiglio e' di evitare questa operazione
High Flying
Sottovento
mercury841
11-07-2006, 12:30
ok, grazie. Però c'è un problema: quando cerco di dellocare in un programma con questa funzione il processo è come se andasse in crash(cioè termina in modo anormale e stampa a video killed), se invece tolgo dalla funzione l'istruzione "free(array_di_stringhe);" il programma funziona tranquillamente.
trallallero
11-07-2006, 13:39
ok, grazie. Però c'è un problema: quando cerco di dellocare in un programma con questa funzione il processo è come se andasse in crash(cioè termina in modo anormale e stampa a video killed), se invece tolgo dalla funzione l'istruzione "free(array_di_stringhe);" il programma funziona tranquillamente.
come ti dice sottovento togli l'istruzione fuori dal ciclo ;)
poi prova con questo metodo professionale di debug :D
(se hai un output disponibile) e vedi se ancora si rompe:
void dealloca(char **array_di_stringhe){
int i=0;
puts( "1" );
while ( array_di_stringhe[i] != NULL ){
free(array_di_stringhe[i]);
i=i+1;
}
puts( "2" );
free(array_di_stringhe);
puts( "3" );
return; // NON SERVE ;)
}
Black imp
11-07-2006, 13:52
scusa ma che senso ha deallocare un puntatore a NULL? se punta a NULL vuol dire che non punta ad alcun indirizzo e quindi giustamente il SO non sa che cosa deallocare. è sbagliato concettualmente. è come chiedergli di svuotare un frigo che non esiste.
mercury841
11-07-2006, 14:43
Ok grazie a tutti ho risolto, era un problema del mio programma non della funzione di deallocazione. Ho tolto anche il free sul puntatore a NULL.
Ciao
trallallero
11-07-2006, 15:00
Ok grazie a tutti ho risolto, era un problema del mio programma non della funzione di deallocazione. Ho tolto anche il free sul puntatore a NULL.
Ciao
é facile che ci sia un controllo sul puntatore tipo:
void free( void *p)
{
if (!p)
return;
...
}
io l'avrei un controllo del genere :read: :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.