-1

画像の各ピクセルに 3 つのデータポイントを格納したいクラスがあります。私は std::tuple がこれを行う良い方法だと思った:

class CameraManager {
private:
    static const int width_  = 700;
    static const int height_ = 574;
     //this causes a segfault...
    std::tuple<double,double,bool> mapping_[width_][height_];

public:
    CameraManager();

}

この関数で宣言されたカメラ マネージャー オブジェクトがあるため、segfault は main(int argc, char ** argv) で直接発生します。

ここで何が起こっているのですか?

4

2 に答える 2

1

計算してみましょう:一部のマシンstd::tuple<double,double,bool>では約 24 バイトのコストがかかるため、マトリックス 700x574 は約 9,643,200 バイト、つまり約 10MB のコストがかかります。

ほとんどの実装では、1MB、おそらく 2MB のスタック サイズが割り当てられます。実装でより大きなスタック サイズを指定できる場合は、それを ~12MB より大きい値に設定します。

mapping_それ以外の場合は動的に割り当てます:

using my_tuple = std::tuple<double,double,bool>;
std::vector<my_tuple> mapping_;

その後:

CameraManager() : mapping_(width_ * height_) { ... }

そして、その上に単純なマトリックス ビューを作成することもできますvector

于 2014-10-16T13:33:01.363 に答える