|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
[c]=deallocazione array di puntatori a caratteri
se ho un array di puntatori a carattere in cui l'ultimo elemento punta a NULL, per deallocarlo va bene questa funzione:
Codice:
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;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Come mai fuori dal ciclo c'e' un
free(array_di_stringhe[i]); ?
__________________
In God we trust; all others bring data |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
non so se serve, l'ho messo per deallocare l'ultimo puntatore a NULL.
grazie per la pazienza,ciao |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Il mio consiglio e' di evitare questa operazione High Flying Sottovento
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
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.
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
poi prova con questo metodo professionale di debug (se hai un output disponibile) e vedi se ancora si rompe: Codice:
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 ;)
}
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2000
Città: MILANO
Messaggi: 2662
|
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.
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 409
|
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 |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Codice:
void free( void *p)
{
if (!p)
return;
...
}
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:18.



















