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

为啥 Segmentation fault

2013-01-02 
为什么 Segmentation fault ?一个简单的函数,代码如下:void avg (int a[]){int i 0int sum 0while (

为什么 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更清晰一点。

热点排行