输出段错误
Segmentation fault at output
我在以下 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 << c << std::endl; 行。如果我删除该行,程序运行正常。
谁能给我解释一下为什么会这样,背后是否有更深层次的逻辑?我还是一个 C++ 初学者,由于编译器错误只说 "segmentation fault" 而没有任何其他信息,我在这里有点不知所措。
还有,我该如何解决? :-)
非常感谢任何帮助!
PS:我知道关于这个话题有无数的话题。但这在某种程度上只会让获取有用信息变得更加困难。我查看了 Wiki 条目,但它似乎没有涵盖我的问题。
可能您试图在 main() 函数中保留太多内存(我的意思是互素数数组,3000x3000 的布尔值超过 8MB)。有关详细信息,请参阅 here。
由于 coprimes
矩阵太大,存在堆栈溢出问题。
您可以在堆上动态分配内存(不要忘记释放)。
bool **coprimes = new bool*[N];
for (int i = 0; i < N; ++i)
coprimes[i] = new bool[N];
我在以下 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 << c << std::endl; 行。如果我删除该行,程序运行正常。
谁能给我解释一下为什么会这样,背后是否有更深层次的逻辑?我还是一个 C++ 初学者,由于编译器错误只说 "segmentation fault" 而没有任何其他信息,我在这里有点不知所措。
还有,我该如何解决? :-)
非常感谢任何帮助!
PS:我知道关于这个话题有无数的话题。但这在某种程度上只会让获取有用信息变得更加困难。我查看了 Wiki 条目,但它似乎没有涵盖我的问题。
可能您试图在 main() 函数中保留太多内存(我的意思是互素数数组,3000x3000 的布尔值超过 8MB)。有关详细信息,请参阅 here。
由于 coprimes
矩阵太大,存在堆栈溢出问题。
您可以在堆上动态分配内存(不要忘记释放)。
bool **coprimes = new bool*[N];
for (int i = 0; i < N; ++i)
coprimes[i] = new bool[N];