分段错误(核心转储)- 无法访问的计数器值

Segmentation fault (core dumped) - unreachable counter value

本文关键字:访问 计数器 错误 核心 转储 分段      更新时间:2023-10-16

我需要使用布尔值的二维表来帮助我解决动态规划方法的问题。不幸的是,我遇到了一个问题,我想打印计数结果。 我以前没有用 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线时,一切正常,程序确实完成了工作(尽管我看不到结果)。提前感谢您帮助我解决这个(很可能)简单的问题。

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

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