2016-04-18 6 views
0

Ich war nur curoius ist, was ist der einfachste Weg, Speicher neu zu reservieren? Auf meiner Fakultät haben wir diesen Code realloc Speicher (Beispiel) verwendet:Einfachster Weg zum Realloc

if (dat = fopen(argv[1], "rb")) { 
    do { 
     p = fread(&art, sizeof(ARTIKAL), 1, dat); 
     if (p) { 
     if (n == c) niz = (ARTIKAL *)realloc(niz, (c *= 2) * sizeof(ARTIKAL)); 
     niz[n++] = art; 
     } 
    } while (p); 
    fclose(dat); 

ich über die Verwendung von Rückspulfunktion denke, aber ich bin nicht 100% sicher, wie ich es umsetzen könnte.

+1

Statt 'rewind', meinen Sie' fseek' und 'ftell', um die Dateigröße vorher zu bestimmen und genügend Speicherplatz von Anfang an zu reservieren? –

Antwort

1

Warum benötigen Sie in diesem Beispiel eine rewind()-Funktion?

Ihr Beispiel scheint in Ordnung zu sein, ist eine Sache, die verbessert werden können:

if (dat = fopen(argv[1], "rb")) { 
do { 
    p = fread(&art, sizeof(ARTIKAL), 1, dat); 
    if (p) { 
    if (n == c) 
    { 
     ARTIKAL *tmp = (ARTIKAL *)realloc(niz, (c *= 2) * sizeof(ARTIKAL)); 

     if (tmp == NULL) 
     { 
     printf("Not enough memory!\n") 
     return 0; 
     } 
     else 
     { 
     niz = tmp; 
     } 

    niz[n++] = art; 
    } 
} while (p); 
fclose(dat); 

kaufen Hinzufügen des oben, Ihr Code ist sicherer, da realloc kehrt NULL wenn es Speicherplatz zuweisen fehlschlägt und Sie dann locker deine Daten.

+0

@StoryTeller Besser? –