When I try to run this
int N=10000000;
short res[N];
I get segmentation fault 11
when I change to
int N=1000000;
short res[N];
it works fine
When I try to run this
int N=10000000;
short res[N];
I get segmentation fault 11
when I change to
int N=1000000;
short res[N];
it works fine
您已经超出了操作系统提供的堆栈空间。如果您需要更多内存,最简单的方法是动态分配它:
int N=1000000;
short* res = new short[N];
但是,std::vector
在这种情况下是首选,因为上面需要您free
手动记忆。
int N = 1000000;
std::vector<short> res (N);
unique_ptr
如果你可以使用 C++11,你也可以通过使用数组特化来节省一些时间:
std::unique_ptr<short[]> res (new short[N]);
res[index]
由于重载,上述两种自动方法仍然可以以熟悉的语法使用operator[]
,但要获取内存操作的原始指针,您需要res.data()
withvector
或res.get()
with unique_ptr
。
你不能在堆栈上分配所有这些。尝试short* res = new short[10000000];
并且不要忘记清理。
或者,您可以使用std::vector<short> res(10000000);