私はここでたくさん検索しましたが、C++の高度な初心者のための私の正しい説明はありません。以前は構造体のベクトルで作業していましたが、現在はセグメンテーションフォールトが発生しています...C++構造体のベクタを初期化する正しい方法
このようなオブジェクトが実際にどのように機能するのか、それが正しい方法であるかを知りたいのですが!私はそれのサイズを変更し、値でそれを埋める前に
std::vector<numberOfSpecies> size;
:
は私が
struct numberOfSpecies {
int predator;
int prey1;
int prey2;
};
のような構造体と、それのベクトルを持っています。
size.resize(100);
これは実際に何をしていますか?これは構造体のための権利ですか? それがゼロで初期化されているように見えます...
は今、私はこのようなをしています:
size[t].predator=0;
size[t].prey1=0;
size[t].prey2=0;
for(int k = 0; k < N; ++k){
size[t].predator++;
size[t].prey1++;
size[t].prey2++;
}
は、この権利ですか?起こりうる問題はどこですか?それをより良くするには?
resizeは 'n '個の構造体を作成しますが、あなたは(デバックモードを使用しているため)事故で0で初期化されるだけです。あなたはそれを使用する方法のサイズを変更した後、各値にランダムな未定義の値があると仮定する必要があります。 – Hayt
助けてもらえますか?値は何ですか 't'ですか?セグメンテーションフォルトはどこで発生しますか?もう少しコードを追加してください。好ましくは、http://stackoverflow.com/help/mcveの方法で – Hayt
@Haytあなたは0での初期化のために確かに事故ですか?私はいつもresizeがオブジェクトのコンストラクタを呼び出すと考えています。この場合、デフォルトのコンストラクタはすべてのメンバを0にします。 – Garf365