【发布时间】:2015-05-17 15:55:24
【问题描述】:
我用 C 语言编写了一个程序。尝试使用我的小 txt 文件作为参数运行它时,我没有问题。不幸的是,当我尝试加载更大的文件时,我遇到了分段错误(核心转储。甚至我的主函数的 1 行也没有执行。这是负责启动和加载 txt 文件作为我的 argv[1] 参数的代码的一部分.我真的不明白问题出在哪里。大 Txt 文件大约 13 MB。我正在使用 linux(ubuntu)。我将不胜感激。
#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变大,尝试使用动态内存分配:Edge* Graph=malloc(E*sizeof(Edge));if(Graph==NULL){printf("malloc failed E=%d\n",E);exit(1)}...free(Graph);对visited执行相同操作。检查文件是否正确打开if(fid==NULL){printf("unable to open file %s\n",argv[1]);exit(1);} -
要找出问题所在,在
printf()语句之后添加fflush(stdout);。sdtout被缓冲。或者使用诸如gdb之类的调试器。看看*.com/questions/8969665/…
标签: c memory-management segmentation-fault