0

クラスからいくつかのデータを印刷しようとしていますが、整数に達するまで正常に印刷され、ヒープ破損エラーがスローされます。なぜこれを行うのか、誰かが私に説明できますか?

void Skill::Display(ostream& out){
    char* myName = getName();
    char* myDescription = getDescription();
    int myLevel = getLevel();

    out << " - " << myName << " -- " << myDescription << "[Lvl: ";

    out << myLevel << "]" << endl; //Everything up to here is fine
}//breakpoint here and it gives me heap error.

int を出力するとヒープ エラーが発生する理由がわかりません。

4

3 に答える 3

2

myName または myDescription のバッファ オーバーランが原因でエラーが発生している可能性が高いと思います。それらはどのように計算されますか?null 終了を忘れずに、バッファー サイズを考慮しましたか?

エラーが検出されたポイントは、必ずしもエラーが発生したポイントではないことに注意してください。

于 2012-08-18T22:44:25.730 に答える
0

getName() または getDescription() メソッドでエラーが発生しています。初期化の問題とヌル ポインターを確認します。@Atimony からのアドバイスも参照してください。不適切に終了した文字列も問題を引き起こす可能性があります。

于 2012-08-18T22:45:19.373 に答える
0

ヒープ破損の問題は、破損が検出された場所が、実際に破損が発生した場所とはまったく関係がないことが非常に多いことです。破損は、別のコンポーネントの別の方法でずっと前に発生した可能性があります。

あなたは再現を持っているように聞こえます。その場合、犯罪者のコードを見つける最も簡単な方法は、Windows の場合はページ ヒープを有効にするか、Unix の場合はElectric Fenceを有効にすることです。これにより、破損が発生した正確な場所で実行可能ファイルが破損します。

于 2012-08-18T23:08:15.083 に答える