为什么 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放在不同位置,就造成了内存访问出错。求解答,谢谢!
[解决办法]
嗯
[解决办法]
逗号表达式返回的后一个表达式的值,所以(i < size, ++i)返回的是++i的值,这个一直是true,所以一直加,超过了size导致Segmentation fault。这个循环用for更清晰一点。