2016-04-18 37 views
0

私はちょうどcuroiusだったが、メモリをreallocする最も簡単な方法は何ですか?私の学部で 我々はメモリ(例)reallocのためにこのコードを使用しました:最も簡単な方法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); 

私は巻き戻し機能を使用して考えているが、私はどのように私はそれを実装することができ、100%わかりません。

+1

'rewind'の代わりに' fseek'と 'ftell'を使って事前にファイルサイズを決め、最初から十分なメモリを割り当てることを意味しますか? –

答えて

1

この例では、なぜrewind()関数が必要ですか?

あなたの例を向上させることができる罰金、一つのことのようです:上記の追加

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); 

が買い、それはスペースの割り当てに失敗したとき、あなたのコードがrealloc戻りNULLいるので、より安全で、あなたはその後、緩いですあなたのデータ。

+0

@StoryTeller Better? –

関連する問題