
Originariamente inviata da
M.A.W. 1968
Riguardo alla realloc(), vi sono effettivamente tre cose fondamentali che devi sapere subito:
1) Non va usata e devi dimenticarti anche della sua esistenza.
2) Non va usata e devi dimenticarti anche della sua esistenza.
3) Non va usata e devi dimenticarti anche della sua esistenza.
Escludendo le funzioni hard I/O bound (es. lettura/scrittura su supporti di massa, I/O su filestream di sistema che corrispondono a socket TCP/IP, linee e bus seriali, etc), la realloc() è la funzione in assoluto potenzialmente più inefficiente e disastrosa dal punto di vista prestazionale dell'intera libreria standard. Nessun principiante dovrebbe sognarsi di usarla, men che meno con una densità elevata di chiamate in un singolo programma. E anche i professionisti devono ricorrervi con estrema parsimonia.
Dunque, segui l'ottimo consiglio del nostro oregon, accetta la stringa di partenza in un unico buffer di ampie dimensioni, allocato staticamente, e poi divertiti a reinventare una strtok() fatta in casa per separare le varie parole, allocando dinamicamente lo spazio per ciascuna di esse.