为什么这段代码会导致分段错误?我正在使用code::blocks。
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a[555555];
}
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a[555555];
}
你来对地方了,可以问问题啦。 ;)
这个数组很大,并且存在于堆栈中。代码崩溃是因为它耗尽了有限的堆栈空间。
如果你在堆上分配a
,问题可能会消失。
正如其他人已经告诉你的那样,你正在尝试在堆栈中分配大量内存,而堆栈空间通常非常有限。
例如:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a[555555];
int* b = new int[555555];
delete [] b;
}
我对你的代码有一些考虑。
首先,现代编译器会认为a
没有被使用,然后它将被丢弃。
但是,如果你把某个值放到某个位置,a
将被分配,即使它比堆栈大小还要大。内核不允许你这样做:这就是为什么你会得到一个SIGSEGV信号。
最后,你应该依赖于std::array
或std::vector
而不是纯C数组。