1

したがって、ポインターの初期容量は5で、ファイル内の整数の数に応じてサイズが変更されます。その後、読み取った整数を配列に出力したいと思います。しかし、実行中にこのエラーが発生しました。

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

(その後、大量のもの)

コード:

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


    }
4

1 に答える 1

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使用できなくなります。

于 2012-04-06T16:37:44.523 に答える