分段故障(核心转储) - 无法到达的计数器值

时间:2013-11-11 16:53:14

标签: c++

我需要使用布尔的二维表来帮助我解决动态编程方法的问题。不幸的是我遇到了一个问题,我想打印计数结果。之前我没有用c ++编写很多代码,所以我不明白这段代码的错误,特别是因为我没有在这里使用任何自定义的结构,类或指针而且我加倍检查迭代器中的数组边界是否正确。

这是一个简单的代码,它是我的问题的一个例子:

const short int N=1001;
const short int M=10001;

int main() {
    bool tab[N][M];
    for (int i=0;i<N;i++)
        for (int j=0;j<M;j++)
            tab[i][j]=false;

    int foo=0;
    for (int i=0;i<N;i++)
        for (int j=0;j<M;j++)
            if (!tab[i][j])
                foo++;

    cout << foo << endl;

    return 0;
}

为什么尝试打印foo值会导致分段错误错误?在我尝试在for函数中增加它之前,该变量已初始化。当我删除cout行时,一切正常,程序完成了工作(虽然我无法查看结果)。在此先感谢帮助我解决这个(最有可能)简单的问题。

1 个答案:

答案 0 :(得分:2)

存在分段错误错误,因为您尝试存储的数字对于整数变量来说太大了。

您尝试将10011001(1001 * 10001)存储在整数变量中时,它可存储的最大值为32767(http://www.cplusplus.com/reference/climits/