2016-11-02 18 views
0

クラッシュが1つあります。私はスタックを分析するためにgdbを使用しますが、私は以下の結果を得ました。なぜ2回呼び出されるのですか?

13 0x00007f423c6e9670 in ??() 
#14 0x00007f42340496d8 in ??() 
#15 0x0000000003cef568 in ??() 
#16 0x00000000008da861 in HuffmanEnd() 
#17 0x00000000008d4a83 in faacEncClose() 
#18 0x00000000004fd797 in RecorderSession::~RecorderSession (this=0x7f423404ea90, __in_chrg=<value optimized out>) 
at /root/Desktop/VideoRecoder/2.0/src/videorecorder/RecorderSession.cpp:203 
#19 0x00000000004fdae9 in RecorderSession::~RecorderSession (this=0x7f423404ea90, __in_chrg=<value optimized out>) 
at /root/Desktop/VideoRecoder/2.0/src/videorecorder/RecorderSession.cpp:203 
#20 0x0000000000500d0b in RecorderSession::OnHangup (this=0x7f423404ea90) at /root/Desktop/VideoRecoder/2.0/src/videorecorder/RecorderSession.cpp:295 
#21 0x000000000045e083 in CSipPhone::on_call_state (call_id=2, e=<value optimized out>) 

わかるように、クラッシュはハフマンエンドで発生します。しかし、なぜ〜RecorderSessionが2回呼び出されたのか分かりませんが、私は以下のようにRecorderSessionオブジェクトを削除するために "delete this"というコードを使用しています。 return 0; }

「これを削除してください」という現象がこの現象を引き起こしますか?

+3

私たちはどのように知っていますか?あなたのコードがどのように見えるかはわかりません。 –

+0

私はあなたのコードで 'を削除する必要があるとは思わない –

+0

とコードは....どこですか? –

答えて

0

あなたの関数OnHangup自体がすでに問題のオブジェクトのデストラクタから呼び出されている可能性があります。したがって、オブジェクトが既に破棄されているときにdeleteを呼び出すと、2重削除が発生します。

+0

これは、動的に割り当てられていないものを「削除」している可能性が高いです。 –

+0

RecorderSessionオブジェクトは動的に割り当てられます。 OnHangupはデストラクタで呼び出されません。このクラッシュは毎回発生するのではなく、一度だけ発生します。 – tonyye

0

あなたのオブジェクトは、新規プレースメント、スタック上のローカルオブジェクト、名前空間スコープ/グローバル、または別のオブジェクトのメンバーとして作成されたようです。

この場合、Dtorはもう一度呼び出されます。

+1

mcveを推測せずに待ちます – NathanOliver

関連する問題