首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

跪求解答 段异常!

2013-02-04 
跪求解答 段错误!!求教各位大神:sprintf(filename,/home/panda/met/ag/netlongwave/%d.%d.%d.txt,year,m

跪求解答 段错误!!
求教各位大神:
sprintf(filename,"/home/panda/met/ag/netlongwave/%d.%d.%d.txt",year,month,day);
  if((Metfile = fopen(filename,"rt")) == NULL){
  fprintf(stderr,"could not open file %s\n",filename);
  exit(1);
}
  
while(!feof(Metfile)){
  fscanf(Metfile,"%f %f %f\n",&lat1, &lon1, &met1);
  lat[counter] = lat1;
  lon[counter] = lon1;
  met[counter] = met1;
  counter ++ ;
}
fclose(Metfile);
这段程序在运行时 出现段错误。 调试了下 计数器 counter会突然变成一个很大的负数。 这是什么问题,怎么解决?
我的系统是 ubuntu linux  编译器是gcc 
[解决办法]
gdb ,程序打个断点 一步步走下去,看看那里core dump 就知道了。
[解决办法]
数组越界;  要么数据太多,counter类型太小,加到最大值再加就变成负的最大。
还有,数据文件最后是否有空行?

[解决办法]
1、可能是filename空间不够;
2、counter为负或过大导致lat/lon/met数组越界。

引用:
求教各位大神:
sprintf(filename,"/home/panda/met/ag/netlongwave/%d.%d.%d.txt",year,month,day);
  if((Metfile = fopen(filename,"rt")) == NULL){
  fprintf(stderr,"could not open file %s\n",file……

[解决办法]
counter 初始化了没有?
 int counter;
 counter = 0;

[解决办法]
进来学习一下
[解决办法]
这需要一步步跟踪counter

引用:
引用:1、可能是filename空间不够;
2、counter为负或过大导致lat/lon/met数组越界。

引用:求教各位大神:
sprintf(filename,"/home/panda/met/ag/netlongwave/%d.%d.%d.txt",year,month,day);
  i……

[解决办法]
另外counter未初始化,或者是filename空间不足,也有可能造成这种奇怪的问题。

引用:
引用:1、可能是filename空间不够;
2、counter为负或过大导致lat/lon/met数组越界。

引用:求教各位大神:
sprintf(filename,"/home/panda/met/ag/netlongwave/%d.%d.%d.txt",year,month,day);
  i……

[解决办法]
断点调试 是每个程序必要掌握的技能!!

热点排行