读书人

为啥 Segmentation fault

发布时间: 2013-01-02 13:08:44 作者: rapoo

为什么 Segmentation fault ?
一个简单的函数,代码如下:


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放在不同位置,就造成了内存访问出错。求解答,谢谢!
[解决办法]
引用:
引用:while (i < size, ++i) // 此处表达式 ++i,编译运行时报:Segmentation fault
sum += a[i];
(i < size, ++i) 相当于++i
意思就是说,i < size 这个表达式没起作用了?

[解决办法]
逗号表达式返回的后一个表达式的值,所以(i < size, ++i)返回的是++i的值,这个一直是true,所以一直加,超过了size导致Segmentation fault。这个循环用for更清晰一点。

读书人网 >C++

热点推荐