2011-12-20 12 views
2

プログラムが突然クラッシュし、コアファイルでこのエラーが発生します。コアファイルの_kernel_vsyscall()

正確には:

Program terminated with signal 6, Aborted. 
#0 0x00c60410 in __kernel_vsyscall() 
#0 0x00c60410 in __kernel_vsyscall() 
#1 0x00444df0 in raise() from /lib/libc.so.6 
#2 0x00446701 in abort() from /lib/libc.so.6 
#3 0x0047d3ab in __libc_message() from /lib/libc.so.6 
#4 0x004856c5 in _int_free() from /lib/libc.so.6 
#5 0x00485b09 in free() from /lib/libc.so.6 

が、これはLinuxで関連しているか、私は私のコードで間違っているのでしょうか?

解決方法

ありがとうございます。

+1

スタックトレースを読み取る方法は、現在の*と*がどこにあるかを示す*と*がどこにあるかを示します。ボトムアップから、あなたが所有しているメソッドまたは呼び出されたメソッドを探します。 – user7116

答えて

5

エラーはfree()にあります。これはおそらくプログラムで呼び出す関数であり、間違いを犯す可能性が高い場所です。無効なポインタを解放した可能性があります(おそらくダブルフリーですか?)。スタックトレースには、free()以下で呼び出されたため、他のすべての関数が表示されます。これは、ライブラリ関数を誤って呼び出すときによく起こります。したがって、一般的には、認識していることに気をつけてください。経験則として、あなたが認識しているスタックトレース(プログラム内にあるもの)を一番遠く見てみたいと思うでしょう。スタックやプログラムの上に他のメモリ破損がある場合はそこを見てくださいあまり助けにならないでしょう。明確にするため

編集:sixlettervariablesが指摘するように、あなたはあなたあなたが認識た最新の場所を見つけたいので、「スタックダウン」「リストの一番上に向かって」を意味します。私は最初の言葉遣いが混乱するかもしれないことに気づきます。

+0

+1、 "あなたが認識するスタックトレースを一番遠く見てみる"。 – user7116

+1

'free'や' malloc'などのクラッシュで現れるバグを見つける最速の方法は、通常ValgrindやASanの下でプログラムを実行することです。 –

関連する問題