为什么 Segmentation fault ?

jeff_nie 2012-12-21 10:13:00
一个简单的函数,代码如下:

void avg (int a[])
{
int i = 0;
int sum = 0;
while (i < size, ++i) // 此处表达式 ++i,编译运行时报:Segmentation fault
sum += a[i];
}


如果将将上面函数改为:

void avg (int a[])
{
int i = 0;
int sum = 0;
while (i < size)
{
sum += a[i];
++i; // 把 ++i放到循环体内就OK
}
}

上面这个函数编译运行就不会错。

在网上查了下有关Segmentation fault的原因,是因为访问的内存超出了系统所给这个程序的内存空间。但不知道,为什么在上面的函数中将表达式++i放在不同位置,就造成了内存访问出错。求解答,谢谢!
...全文
168 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
无猫皆笼 2012-12-21
  • 打赏
  • 举报
回复
逗号表达式返回的后一个表达式的值,所以(i < size, ++i)返回的是++i的值,这个一直是true,所以一直加,超过了size导致Segmentation fault。这个循环用for更清晰一点。
newtee 2012-12-21
  • 打赏
  • 举报
回复
引用 4 楼 jeff_nie 的回复:
引用 1 楼 zhuankeshumo 的回复:while (i < size, ++i) // 此处表达式 ++i,编译运行时报:Segmentation fault sum += a[i]; (i < size, ++i) 相当于++i 意思就是说,i < size 这个表达式没起作用了?
jeff_nie 2012-12-21
  • 打赏
  • 举报
回复
引用 4 楼 jeff_nie 的回复:
引用 1 楼 zhuankeshumo 的回复:while (i < size, ++i) // 此处表达式 ++i,编译运行时报:Segmentation fault sum += a[i]; (i < size, ++i) 相当于++i 意思就是说,i < size 这个表达式没起作用了?
如果是这样的话,就清楚了。
jeff_nie 2012-12-21
  • 打赏
  • 举报
回复
引用 1 楼 zhuankeshumo 的回复:
while (i < size, ++i) // 此处表达式 ++i,编译运行时报:Segmentation fault sum += a[i]; (i < size, ++i) 相当于++i
意思就是说,i < size 这个表达式没起作用了?
jeff_nie 2012-12-21
  • 打赏
  • 举报
回复
引用 2 楼 zhuankeshumo 的回复:
无限循环了。
我定义了全局变量const int size = 10; 为什么会无限循环?
newtee 2012-12-21
  • 打赏
  • 举报
回复
无限循环了。
newtee 2012-12-21
  • 打赏
  • 举报
回复
while (i < size, ++i) // 此处表达式 ++i,编译运行时报:Segmentation fault sum += a[i]; (i < size, ++i) 相当于++i

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧