24/03/10 10:43
robrock80
Innanzi a tutto volevo chiedervi se è corretta la seguente riga per allocare dinamnicamente array di i + 1 stringhe
char** strArr = (char**)malloc(sizeof(char*) * (i + 1));
Seccome volevo utilizzare l'ultimo elemento dell'array come indicatore di fine array mi chiedevo: la malloc inizializza i punatori successivi al primo a zero, ossia strArr + 1, strArr + 2, etc... sono = a 0?
Ultima modifica effettuata da robrock80 24/03/10 10:45
aaa
24/03/10 12:27
robrock80
Si, mi piace, si legge meglio. Però ho un dubbio sul PS: se io alloco "i + 1" anche se l'ultimo elemento lo lascio a 0, io devo comunque deallocarlo, altrimenti la CPU non libera quella parte di memoria, fino a che il processo non è chiuso, mi sbaglio?
aaa
24/03/10 12:31
TheKaneB
ti sbagli...
con una malloc/calloc, allochi l'array di puntatori a char di dimensione N+1.
Poi, dentro un ciclo for, allochi altri N array di char (le stringhe), mentre l'N+1-esimo elemento lo setti a 0 (quindi rimane allocato l'elemento, ma non punta a nessuna stringa).
quando deallochi, prima elimini le N stringhe, poi elimini l'array di N+1 puntatori. L'elemento N+1 non è mai stato occupato da un buffer allocato, quindi non devi deallocarlo per nessun motivo. Diciamo che facendo il free dell'array di N+1 elementi, se ne va anche la memoria occupata da quel puntatore nullo nella posizione N+1 (così come se ne vanno anche tutti i precedenti N puntatori).
aaa