これを実行しようとすると
int N=10000000;
short res[N];
セグメンテーション違反11が発生する
に変わるとき
int N=1000000;
short res[N];
それはうまくいきます
OSによって指定されたスタックスペースを超えました。より多くのメモリが必要な場合は、動的に割り当てるのが最も簡単な方法です。
_int N=1000000;
short* res = new short[N];
_
ただし、上記ではメモリを手動でfree
する必要があるため、このコンテキストでは_std::vector
_が推奨されます。
_int N = 1000000;
std::vector<short> res (N);
_
C++ 11を使用できる場合は、_unique_ptr
_配列特殊化を使用することで、時間の一部を節約することもできます。
_std::unique_ptr<short[]> res (new short[N]);
_
上記の自動メソッドはどちらも、オーバーロードされた_res[index]
_のおかげで、おなじみの_operator[]
_構文で引き続き使用できますが、メモリ操作の生のポインタを取得するには、vector
またはres.data()
が必要です。 res.get()
と_unique_ptr
_.
そのすべてをスタックに割り当てることはできません。 _short* res = new short[10000000];
_を試して、クリーンアップすることを忘れないでください。
または、std::vector<short> res(10000000);
を使用できます