Я написал программу в C langage. У меня нет проблем при попытке запустить его с моим маленьким txt-файлом в качестве аргумента. К сожалению, когда я пытаюсь загрузить гораздо больший файл, я получаю ошибку сегментации (ядро сбрасывается. Даже одна строка моей основной функции не выполняется. Вот часть кода responisble для запуска и загрузки txt-файла в качестве аргумента argv [1] .. .Я действительно не вижу где файлы problem.Big Txt около 13 МБ Я работаю Linux (Ubuntu) Я был бы признателен за помощьОшибка сегментации при загрузке большого файла txt.file в программу C
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int x;
int y;
int wage;
}Edge;
int main(int argc, char *argv[]) {
printf("Program starts");
int x,y,z;
int counter = 1;
int N,E; //node,edges
FILE *fid;
fid = fopen(argv[1],"r");
fscanf(fid,"%d%d",&N,&E);
Edge Graph[E];
int visited[N+1];
while(counter <= E){
fscanf(fid, "%d%d%d", &x, &y,&z);
Graph[counter-1].x=x;
Graph[counter-1].y=y;
Graph[counter-1].wage=z;
counter=counter+1;
}
printf("\nWe load all edges. Here is our Graph");
fclose(fid) ;
printf("Program ends");
return 0;
}
Если 'Graph' получает большой, попробуйте использовать динамическое выделение памяти:' Край * Graph = таНос (E * SizeOf (Грань)); если (Graph == NULL) {printf ("malloc failed E =% d \ n", E); exit (1)} '...' free (Graph); 'Сделайте то же самое для' visited'. Проверьте, правильно ли открыт файл 'if (fid == NULL) {printf (« невозможно открыть файл% s \ n », argv [1]); exit (1);}' – francis
Чтобы определить, где проблема не удалась, добавьте 'fflush (stdout);' после 'printf()' операторов. 'sdtout' забуферирован. Или используйте отладчик, например 'gdb'. Взгляните на http://stackoverflow.com/questions/8969665/how-do-i-find-segmentation-fault-from-multiple-files-using-gdb – francis