Я пытаюсь создать программу, которая читает целые числа из файла с 103690 парами целых чисел, пропуская строки, начинающиеся с #, и сохраняет их в массиве. Даже если это происходит успешно, оно внезапно останавливается после указанной c строки (строка 5115).
Файл выглядит так:
#I must
#be
#skipped
8050 6737
8050 7238
Код:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct {
int start;
int end;
} path;
int doublesize(path* array,int n){
path* new_array=malloc(n*2*sizeof(path));
if(new_array==NULL){
printf("Error allocating memory\n");
abort();
}
for(int i=0;i<n;i++){
new_array[i]=array[i];
}
free(array);
array=new_array;
n*=2;
return n;
}
int main()
{
int maxsize=10;
int test;
path* array=malloc(maxsize*sizeof(path));
if(array==NULL) {
printf("Error allocating memory\n");
abort();
}
FILE* fd=fopen("Wiki-Vote2.txt","r");
if(fd==NULL) {
printf("Error opening file\n");
abort();
}
char buff[200];
int counter=0;
char c;
while(fgets(buff,200,fd)) {
c=buff[0];
if(c=='#') {
continue;
}
test=sscanf(buff,"%d%d",&array[counter].start,&array[counter].end);
printf("%d\t%d\n",array[counter].start,array[counter].end);
printf("Read %d numbers\n", test);
counter++;
if(counter==maxsize){
maxsize=doublesize(array,maxsize);
}
}
fclose(fd);
free(array);
return 0;
}
Я попытался уменьшить количество целых чисел, которое работает, но когда я использовал gdb, я увидел, что он возвращает сигнал sigsegv
(я использую windows). Возможно, памяти недостаточно или это что-то еще?