かなり複雑なコードで問題が発生しています。エラーを再現する短いスニペットを作成できなかったので、問題を言葉で説明しようと思います。
コードはエラーでランダムにクラッシュします
*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 ***
デバッグは、それがコードがオブジェクトを解放する行から来ていることを示しました。オブジェクトに問題はないようです。それは存在し、エラーが発生したときにそのデータにアクセスできます。オブジェクトのデストラクタは些細なものであり、何もしません。
だから、私はちょっと立ち往生しています。どのような状況で「無料」が失敗すると思いますか?
Valgrind でプログラムを実行してみてください。それはあなたに以前の原因を指摘するかもしれませんが、gdbはすでにダメージが発生している場所にのみ侵入しています。
ウォーレンが言ったように、Valgrindは通常それを見つけるための最良の方法です。二重リンクリストは、通常、ネットワークまたはバイナリデータハンドラーのベースです。つまり、QT QByteArray
またはQTcpSocket
にあります。今日も同じことがありました。それは、オブジェクトをマップから削除して無効にしたが、以前にその中のデータへのポインターを取得していたためです。それは時々機能し、時には機能しませんでした。システムの負荷が高いほど、クラッシュする可能性が高くなります。