2012-04-06 1 views
1

Таким образом, начальная емкость указателя равна 5, тогда он будет изменяться сама по себе, зависит от чисел целого в файле, после чего я хотел бы напечатать прочитайте целое число в массиве. Но я получил эту ошибку во время ее запуска.Ошибка при запуске кода с массивом realloc'ed при чтении int из файла

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; 


    } 

ответ

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 и все еще отображаемую ошибку, означающую, что во время цикла возникает ошибка, когда я realloc arr, любая идея, почему? –

Смежные вопросы