10

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

4

2 回答 2

15

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

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()withvectorres.get()with unique_ptr

于 2013-10-22T15:34:32.830 回答
0

你不能在堆栈上分配所有这些。尝试short* res = new short[10000000];并且不要忘记清理。

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

于 2013-10-22T15:34:51.590 回答