1

構造の要素を含むベクトルがあります。

    struct hairParticle{
        bool seed;
        double mass;
        double diameter;
        double stiffnessCoeff;
        double bendingCoeff;
        double frictionCoeff;
        glm::vec3 position;  
        glm::vec3 velocity;  
        glm::vec3 force;
        std::vector<glm::vec3> direction;
        std::vector<unsigned int> neighbours;
        std::vector<double> neighbourRestingLengths;
    };

このベクターにデータを取り込もうとすると、約 1000 のエントリで問題なく動作しますが、約 3000 のエントリではプログラムがメモリの不適切な割り当てでクラッシュします。何が原因なのかわかりません。グーグルで調べたところ、次のことがわかりました。

http://www.cplusplus.com/forum/general/13653/

コンピュータは、おそらく内部ベクトルのサイズを考慮せずに、この構造体のサイズが 120 バイトであると言いますが、今のところ、それらのサイズは 10 要素以下です。したがって、3000 要素ごとに 200 バイトであっても、最大メモリ 4GB で十分です。

もう1つの解決策は、ベクトルの代わりに両端キューを使用することでしたが、私が理解しているように(おそらく間違っています)、両端キューはインデックス作成にはあまり適していないため、どの要素にもできるだけ速くアクセスできるようにする必要があります。

内部ベクトルを変更する必要がありますが、それらはポインタとして構造体に格納されていると思います。つまり、内部ベクトルが変更された後、(これらの構造体要素の) ベクトル全体がメモリを再割り当てする必要はありません (これもおそらく私は '私はこれについて間違っています)。

Windows で Code::Blocks を使用しています。

このエラーの原因と修正方法を知っている人はいますか?ベクターをコンテナとして保持したいのですが、主張しないでください:)ありがとう

4

1 に答える 1