0

SIGABRT の後にダンプされたコアを分析すると、以下に示すように、(ライブラリ コードに入る前に) 実行されたコードの最後の行がポインターNULLへの割り当てであることが gdbcharによって示されます。

gdb:

(gdb) bt full
#0  0x006337a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
No symbol table info available.
#1  0x00674815 in raise () from /lib/tls/libc.so.6
No symbol table info available.
#2  0x00676279 in abort () from /lib/tls/libc.so.6
No symbol table info available.
#3  0x006a8cca in __libc_message () from /lib/tls/libc.so.6
No symbol table info available.
#4  0x006af55f in _int_free () from /lib/tls/libc.so.6
No symbol table info available.
#5  0x006af93a in free () from /lib/tls/libc.so.6
No symbol table info available.
#6  0x00d0b14e in __builtin_delete () from /usr/lib/libstdc++-libc6.1-1.so.2
No symbol table info available.
#7  0x0808181c in MyObject::~MyObject (this=0x84f4db0, __in_chrg=3) at ./MyObject.cpp:16
    this = (MyObject *) 0x84f4db0

MyObject.cpp:16 リスト:

12: ...
13: MyObject::~MyObject() {
14:   if (this->string != NULL) {
15:     delete this->string;
16:     this->string = NULL;
17:   }
18: }
19: ...

まず、なぜ 16 行目でそのコール スタックが発生するのかわかりません。行 15 の実行の結果である演算子を使用した結果である場合は、より意味がありdeleteます (「行 16」が、そのオブジェクトに割り当てられたメモリを解放するためにデストラクタのコードの後に​​実行されるコードを表している場合を除きます。ここで推測するだけです)。

それ以外に、誰でもそのコアを正しくデバッグする方法を指摘できますか?

4

3 に答える 3

3

にはどんな種類がthis->stringありますか?文字配列ですか?次に、を使用する必要がありますdelete [] this->string。オブジェクトへのポインタですか?次に、そのオブジェクトが既に削除されていてポインターが null になっていないか、オブジェクトが作成されておらず、ポインターが初期化されたままになっています。

于 2013-03-12T14:21:04.717 に答える
1

実際のクラッシュは次の行で発生しました。

15:     delete this->string;

abort内部への呼び出しが原因でクラッシュが発生しました__libc_message。その最後のルーチンは、標準エラーへのメッセージを出力し、メッセージは次のようになりました。

*** glbc detected: double free or heap corruption at ...  ***

ValgrindまたはAddressSanitizerを使用してください:問題を直接指摘します。

16行目でその呼び出しスタックが発生する理由がわかりません。

システムコールにつながったコールスタックを見るとき、制御を呼び出されたプロシージャに移す前に、その命令が実行される次の命令のアドレスをスタックに置くraiseことを理解する必要があります。 GDBは(すべてのデバッガーがそれを行います)に表示されます。その次の命令は、現在の行、次の行、または20行下にある可能性があります。CALLbacktrace

于 2013-03-12T14:27:29.113 に答える
0

実行されようとしている次の行を指します。これは、この場合は 16 行目です。最後に実行されたステートメント/式は 15 行目で、その行でクラッシュしました。

ただし、ここで何が問題なのかを投稿から判断するのは困難です。

于 2013-03-12T14:18:02.823 に答える