|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2006
Città: Firenze
Messaggi: 369
|
allocazione dinamica della memoria in C
ciao, ho un problema con la memoria dinamica: come faccio a liberare la memoria allocata con malloc all'interno di questa funzione???
Codice:
int *pioggia_asciutto () { int i, j; int cont=0; int k=1; for (i=0;i<X;++i) if(strcmp(mat[i][A],"asciutto ")==0 && strcmp(mat[i][b],"pioggia ")==0) cont++; int *vett=(int *)malloc(size_t(cont)); vett[0]=cont; for (i=0;i<X;++i) { if(strcmp(mat[i][A],"asciutto ")==0 && strcmp(mat[i][b],"pioggia ")==0) { vett[k]=i; k++; } } return (vett); }
__________________
...meglio la carne che l'osso ![]() ![]() |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
In questo caso, devi fare: int *vett=(int *)malloc(cont*sizeof(int)); come fai tu non allochi sufficiente memoria, e il rsultato nell'accesso a "vett" diventa potenzialmente indefinito. Ovviamente liberi il tutto con free(vett);
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Feb 2006
Città: Firenze
Messaggi: 369
|
grazie per la correzione su malloc
![]()
__________________
...meglio la carne che l'osso ![]() ![]() Ultima modifica di antimon : 12-05-2007 alle 14:27. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Figurati
![]() Codice:
char *vett[] = (char**)malloc(vett_size*sizeof(char*))); Codice:
for (i = 0; i < vett_size; i++) vett[i] = (char*)malloc(string_lenght*sizeof(char)); /* Per ottimizare le risorse, string_length e' spesso diverso per ogni stringa. */ Codice:
for (i = 0; i < vett_size; i++) free(vett[i]); free(vett[]);
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 12-05-2007 alle 15:23. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Feb 2006
Città: Firenze
Messaggi: 369
|
Nello stesso programma ho utilizzato malloc anche per una stringa:
char *nuova=(char *)malloc(size_t(strlen(a)+1)); però, seguendo lo stesso ragionamento è più corretto: char *nuova=(char *)malloc((strlen(a)+1)*sizeof(char)); ???? ![]()
__________________
...meglio la carne che l'osso ![]() ![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2006
Messaggi: 2722
|
Quote:
Insomma, sempre usare sizeof(var_type).
__________________
- Spesso gli errori sono solo i passi intermedi che portano al fallimento totale. - A volte penso che la prova piu' sicura che esiste da qualche parte una forma di vita intelligente e' il fatto che non ha mai tentato di mettersi in contatto con noi. -- Bill Watterson Ultima modifica di -fidel- : 13-05-2007 alle 11:01. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:56.