私は、ノードが終了したときにそれらを再構成することになっている p2p ネットワークのプロトコルをシミュレートすることについて、Omnet++ anc C++ のプロジェクトに取り組んでいます。しかし、シミュレーションがクラッシュして終了し、コンソールで次のように表示されることがあります: " * glibc が検出されました/opt/omnetpp-4.4/workspace/Progetto/Progetto: free(): 無効なポインタ: 0x09011e4c * * ".
したがって、 free( ) が問題のようですが、私が行う唯一の解放は、メッセージが処理された後にメッセージを削除することです。私は削除しようとしました
delete msg;
しかし、エラーが発生し続けます。それで、どうすればこれを修正できますか?その free() がどこで呼び出されているのかわかりません...
誰かがコードを見たい場合は、ここにあります
https://www.dropbox.com/sh/jdrqrt93qazn4xd/ae-qVqgzEF
更新: チュートリアルで見つけた次のコマンドを使用して、Valgrind でプロジェクト (名前は ./Progetto) を起動しようとしました:
valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track- fds=yes ./Progetto > log.txt
ログをpartebinにコピーしました。ここで読むことができます:
http://pastebin.com/KBWLE2jV
そのログを理解できません。また、valgrind で起動した場合にプロジェクトがクラッシュしないのはなぜですか? 唯一の問題は、ノードが scheduleAt( ) によって自分自身にメッセージを送信すると、プロジェクトがクラッシュすることです...