2017-03-10 4 views
-3

Ich versuche, in einer großen Textdatei und strcpy/strcat es in ein Array zu lesen.Realloc in einer großen Textdatei in C zu lesen

Ich habe ein einfaches Programm:

char buffer[500000]; 
char *text; 
text = malloc(sizeof(char) * 1); 
strcpy(text,""); 

while (fgets(buffer,sizeof(buffer),fp) != NULL) 
{ 
    text = realloc(text,sizeof(char) * strlen(buffer)); 
    strcat(text,buffer); 
    printf("%s",text); 
} 

Das Problem ist, dass schließlich nach einer Menge von Iterationen werden abstürze, aber ich bin mir nicht sicher, warum. Ich habe versucht,

text = realloc(text,sizeof(char) * strlen(buffer) + sizeof(text)); 

zu tun, aber dies funktioniert auch nicht.

+0

Es ist verlockend, 'text = realloc (Text, newsize) zu tun,' aber es ist ein potentielles Speicherleck. –

+0

'sizeof (text)' ist die Zeigergröße, nicht die Inhaltsgröße. Du brauchst 'stelen (text) + strlen (buffer) + 1' als neue Größe. – BLUEPIXY

+0

Fehle ich etwas? Sie werden immer auf die Größe des Puffers umgestellt. Sie fügen nie auf die realloc Größe, immer nur die Größe des Puffers Sie gerade lesen ... – John3136

Antwort

0

Es könnte sein, dass die strlen(buffer) Größe Null ist, bei dem Fall realloc einen Punkt auf NULL zurückgeben kann. Um eine sichere Überprüfung von NULL bei der Rückkehr von Realloc zu sein, und vielleicht sogar die Länge des Puffers vor dem Aufruf von Realloc überprüfen.

Verwandte Themen