永发信息网

Segmentation fault:段错误,检查是否有数组越界,指针异常,访问到不应该访问的内存区域

答案:2  悬赏:40  手机版
解决时间 2021-03-09 00:57
  • 提问者网友:你给我的爱
  • 2021-03-08 14:36
#include
int a[1010][1010];
int main()
{
int i,j,n,m,max[1010]= {0};
scanf("%d%d",&n,&m);
float Max=0.0;
for(i=1; i<=m; i++)
for(j=1; j<=n; j++)
{
scanf("%d",&a[i][j]);
if(a[i][j]>max[j]) max[j]=a[i][j];
}
for(i=1; i<=n; i++) Max+=max[i];
getchar();
printf("%.2f\n",Max/n);
return 0;
}
最佳答案
  • 五星知识达人网友:千夜
  • 2021-03-08 15:27
段错误,一般是访问越界或者溢出了。比如数组长度是10,但是却访问了a[10]这样的操作?如果出现了,那么就是访问越界。字符串拷贝时建议使用strncpy。建议你先检查一下代码。
全部回答
  • 1楼网友:从此江山别
  • 2021-03-08 16:09
1:一般都是非法内存操作,例如数组越界,例如申请a[5],却访问到a[5]或者a[6],这也会有很多情况,可能是循环操作时循环变量控制有问题,可能是字符串拷贝时长度发生溢出; 2:指针指向了非法内存,例如申明一个指针,但是没有对指针进行初始化,直接就引用,或者引用里面的元素或者函数,或者没有分配内存就进行释放等,另外,申请内存还要检查是否申请成功,如果没有申请成功也会出现这种情况; 3:单步调试或者加打印信息,细心一点总可以找到错误的,注意编译成调试版本; 4:如果是linux,可以产生core文件,从core文件查看出错的地方。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯