为什么在这种情况下会出现 "segmentation fault"
Why does "segmentation fault" occur in this case
在这种情况下发生“分段错误”
#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
您的堆栈溢出了。堆栈space是有限的,这就是为什么大对象应该分配在堆上(new
)。
int next[MAX_NODE][MAX_DP];
创建超过 10 MB 的堆栈分配,这肯定大于平均堆栈大小。
在这种情况下发生“分段错误”
#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
您的堆栈溢出了。堆栈space是有限的,这就是为什么大对象应该分配在堆上(new
)。
int next[MAX_NODE][MAX_DP];
创建超过 10 MB 的堆栈分配,这肯定大于平均堆栈大小。