10

これを実行しようとすると

int N=10000000;
short res[N];

セグメンテーション違反 11 が発生する

私が変わるとき

int N=1000000;
short res[N];

それは正常に動作します

4

2 に答える 2

15

OS によって指定されたスタック スペースを超えました。より多くのメモリが必要な場合、最も簡単な方法は動的に割り当てることです。

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

ただし、上記では手動でメモリをstd::vector取得する必要があるため、このコンテキストでは を使用することをお勧めします。free

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

unique_ptrC++11 を使用できる場合は、配列の特殊化も使用することで時間を節約できる可能性があります。

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

res[index]上記の自動メソッドはどちらも、オーバーロードされたおかげで使い慣れた構文で引き続き使用できますがoperator[]、メモリ操作の生のポインターを取得するには、 または を使用する必要res.data()vectorありres.get()ますunique_ptr

于 2013-10-22T15:34:32.830 に答える