Mac上的C ++中的分段错误11

时间:2013-10-22 15:31:58

标签: c++ segmentation-fault

当我尝试运行此

int N=10000000;
short res[N];

我得到了分段错误11

当我改为

int N=1000000;
short res[N];

一切正常

2 个答案:

答案 0 :(得分:13)

您已超出操作系统给出的堆栈空间。如果您需要更多内存,最简单的方法是动态分配它:

int N=1000000;
short* res = new short[N];

但是,在此上下文中首选std::vector,因为上述内容要求您手动free内存。

int N = 1000000;
std::vector<short> res (N);

如果你可以使用C ++ 11,你也可以通过使用unique_ptr数组专业化来节省一些时间:

std::unique_ptr<short[]> res (new short[N]);

由于重载res[index],上述两种自动方法仍然可以使用熟悉的operator[]语法,但要获取内存操作的原始指针,您需要使用res.data() vector {1}}或res.get()unique_ptr

答案 1 :(得分:0)

您无法在堆叠上分配所有内容。试试short* res = new short[10000000];,不要忘记清理。

或者,您可以使用std::vector<short> res(10000000);