これを実行しようとすると
int N=10000000;
short res[N];
セグメンテーション違反 11 が発生する
私が変わるとき
int N=1000000;
short res[N];
それは正常に動作します
これを実行しようとすると
int N=10000000;
short res[N];
セグメンテーション違反 11 が発生する
私が変わるとき
int N=1000000;
short res[N];
それは正常に動作します
OS によって指定されたスタック スペースを超えました。より多くのメモリが必要な場合、最も簡単な方法は動的に割り当てることです。
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()
がvector
ありres.get()
ますunique_ptr
。