当我尝试运行此
时int N=10000000;
short res[N];
我得到了分段错误11
当我改为
时int N=1000000;
short res[N];
一切正常
答案 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);