我在以下C ++程序中遇到了分段错误。
#include<iostream>
const int N = 3000;
int main() {
bool coprimes[N][N];
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
coprimes[i][j] = ((3 * i + j) % 17 == 0);
}
}
for (int c = 1; c < N; ++c) {
for (int a = 1; a < c / 2; ++a) {
int b = c - a;
if (!coprimes[a][b] || !coprimes[a][c] || !coprimes[b][c]) {
continue;
}
std::cout << c << std::endl;
}
}
}
(这个程序没有多大意义。我只是尝试创建一些最小的工作示例。)
奇怪的是,它位于std :: cout&lt;&lt;行c&lt;&lt;的std :: ENDL ;.如果我删除该行,该程序工作正常。
任何人都可以向我解释为什么会发生这种情况以及背后是否存在更深层次的逻辑?我仍然是一个C ++初学者,因为编译错误只说&#34;分段错误&#34;没有任何其他信息,我在这里有点不知所措。
而且,我该如何解决? : - )
任何帮助都非常感谢!
PS:我知道这个话题有很多线索。但这在某种程度上使得获取有用信息变得更加困难。我检查了Wiki条目,但它似乎没有解决我的问题。答案 0 :(得分:0)
可能你试图在你的 main()函数中保留太多内存(我的意思是coprimes数组,3000x3000的bool它超过8MB)。有关详细信息,请参阅here。
答案 1 :(得分:0)
由于coprimes
矩阵太大,存在堆栈溢出问题。
您可以在堆上动态分配内存(不要忘记发布)。
bool **coprimes = new bool*[N];
for (int i = 0; i < N; ++i)
coprimes[i] = new bool[N];