1

私はこのエラーに完全に当惑しています。あなたが私を助けてくれることを願っています! 構造のベクトルを持つクラスがあります (構造は粒子と呼ばれます)。構造体の特定のフィールドのベクトルを返すゲッターを書いているだけです。x というフィールドに対して 1 回、次に v というフィールドに対して :

vector<double> x = s.getx();
vector<double> v = s.getv();

何らかの理由で、getx は機能しますが、getv は機能しません。「malloc(): メモリ破損:」というメッセージが表示されます。

クラス getx と getv は次のとおりです。

vector<double> getx() {

    vector<double> ret(number-2);

    for(int i = 1; i < number; i++) {

        ret[i-1] = masses[i].x;

    }

    return ret;

}

vector<double> getv() {

    vector<double> ret(number-2);

    for(int i = 1; i < number; i++) {

        ret[i-1] = masses[i].v;

    }

    return ret;

}

エラーは次の行で発生します。

vector<double> ret(number-2);

getvで。

私が混乱している理由は、これらの方法が本質的に同じだからです! (number-2) を 4 などの定数に置き換えると、同じエラーが発生します。単にメモリを割り当てることができません!

私が間違ったことをしたことをあなたが見てくれることを願っています...

どうもありがとうございました。

4

1 に答える 1

7

メモリ破損エラーが発生した時点で現れることはめったにありません。後で、破損したメモリに何かがヒットしたときに表示されます。この場合、両方の関数が、それらに属していないメモリに書き込んでいます。それぞれvectorが要素で を初期化し、存在しない にnumber - 2書き込みます。vector[number - 1]

于 2012-11-27T16:59:51.233 に答える