我需要使用布尔的二维表来帮助我解决动态编程方法的问题。不幸的是我遇到了一个问题,我想打印计数结果。之前我没有用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行时,一切正常,程序完成了工作(虽然我无法查看结果)。在此先感谢帮助我解决这个(最有可能)简单的问题。
答案 0 :(得分:2)
存在分段错误错误,因为您尝试存储的数字对于整数变量来说太大了。
您尝试将10011001(1001 * 10001)存储在整数变量中时,它可存储的最大值为32767(http://www.cplusplus.com/reference/climits/)