我正在开发一个关于 Omnet++ anc C++ 的项目,该项目是关于模拟 p2p 网络的协议,该协议应该在节点退出时重新配置它们。但有时模拟崩溃并退出,在控制台上我读到:“ * 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() 向自己发送消息时,项目会崩溃......