1. ホーム
  2. c++

[解決済み] セグメンテーションフォルト11(C++、Mac版

2022-03-03 02:28:45

質問

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

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);

C++11が使えるのであれば、もしかしたら何割か時間を短縮できるかもしれません。 unique_ptr 配列の特殊化も可能です。

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

上記のどちらの自動化手法も、使い慣れた res[index] 文法は、オーバーロードされた operator[] しかし、メモリ操作のための生のポインタを取得するには res.data()vector または res.get()unique_ptr .