Scusate ma avrei un problema con la realloc.. il mio problema e' che devo creare un array di stringhe dinamicamente: nel senso che inizialmente e' vuoto e ci aggiungo una stringa alla volta (il numero di stringhe inizialmente non e' conosciuto).. La soluzione che mi sembra piu ovvia e' fare una cosa del tipo:
char **newfile; int i = 0; int n; do{ newfile = realloc(newfile, (sizeof(char*) * (i+1))); newfile[i] = calloc(MAXLINE, sizeof(char) ); n = read(STDIN, newfile[i], MAXLINE); newfile[i][n-1] = 0; i++; }while(qualcosa);
Il codice sembra essere ok ma a runtime mi da segmentation fault sulla realloc, e non so perche'.. qualcuno saprebbe aiutarmi?
Alla prima esecuzione newfile quanto vale? Nessuno lo sa e con molta probabilita` il valore non e` nel tuo range di indirizzi. Questo spiega il segmentation fault.
Idea alternativa: ti crei una lista in cui ogni elemento ti punta ad un'area di memoria allocata dinamicamente per contenere la singola stringa. Quando hai terminato di caricare le varie stringhe puoi, a tua scelta, allocare un vettore di puntatori della dimensione corretta (che ora conosci) e fare in modo che ogni puntatore faccia riferimento alla stringa corrispondente nella lista.
Mi raccomando, ricordati delle free(void *ptr) prima di terminare il programma .