2012-04-06 7 views
1

ポインタの初期容量は5ですので、ファイル内の整数の数に応じてサイズが変更されます。配列の整数を読み出す。しかし、私はそれを実行している間、このエラーが発生しました。ファイルからintを読み込むときにrealloc'ed配列でエラーコードを実行しています

ERROR:a.out: malloc.c:3574: mremap_chunk: Assertion `((size + offset) & (mp_.pagesize-1)) == 0' failed. 
Aborted 

(その後詰め込むのトン)

CODE:

#include<stdio.h> 
    #include <stdlib.h> 


    int main(void) 
    { 
    int index=0; 
    int cap=5; 
    int *arr = malloc(cap*sizeof(int)); 
    FILE *f; 

    if((f=fopen("/home/alexchan/Downloads/fileOints000.txt","r"))==NULL) 
    printf("You cannot open"); 

    int *y = arr; 

    while(fscanf(f, "%d", arr++)!=EOF) 
    { 
    index++; 
    if(index==cap) 
    arr = realloc(arr, (cap +=10) * sizeof(int)); 
    } 


    int x; 
    for(x=0;x<index;x++) 
    printf("%d\n",*(y++)); 

    return 0; 


    } 

答えて

2

あなたは、アレイを指すようにyを設定するが、配列が再装着されたときに、その値を更新することを忘れています。

while(fscanf(f, "%d", arr++)!=EOF) 
{ 
    index++; 
    if(index==cap) arr = realloc(arr, (cap +=10) * sizeof(int)); 
} 

int *y = arr; // THIS SHOULD BE AFTER THE LOOP 

realloc一般的なケースでは、アレイは適切に増殖しません。まったく別のポインタを返します。この後、古い値yはもう使用できません。

+0

これはうまくいきません。私はコードのprintf部分にコメントしていますが、エラーが表示されています。つまり、whileループにエラーがあります。 –

関連する問題