web-dev-qa-db-ja.com

MacのC ++でのセグメンテーション違反11

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

int N=10000000;
short res[N];

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

に変わるとき

int N=1000000;
short res[N];

それはうまくいきます

9
mariusz2108

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_.

13

そのすべてをスタックに割り当てることはできません。 _short* res = new short[10000000];_を試して、クリーンアップすることを忘れないでください。

または、std::vector<short> res(10000000);を使用できます

0
IdeaHat