在这种情况下会出现“分段错误”
#define MAX_NODE 200001
#define MAX_DP 19
using namespace std;
int main()
{
int next[MAX_NODE][MAX_DP];
return 0;
}
但是,这种情况不会发生
#define MAX_NODE 200001
#define MAX_DP 19
using namespace std;
int main()
{
int **next = (int **)malloc(MAX_NODE * sizeof(int *));
for (int i = 0; i < MAX_NODE; i++)
{
next[i] = (int *)malloc(MAX_DP * sizeof(int));
}
return 0;
}
是什么造成了这种情况?
g++ 版本: Apple clang 版本 12.0.0 (clang-1200.0.32.29) 目标:x86_64-apple-darwin20.3.0 线程模型:posix
答案 0 :(得分:1)
你的堆栈溢出了。堆栈空间有限,这就是为什么应该在堆 (new
) 上分配大对象的原因。
int next[MAX_NODE][MAX_DP];
创建了超过 10 MB 的堆栈分配,这肯定大于平均堆栈大小。