我正在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()向自己发送消息时,项目崩溃了。
最佳答案
免费但简短的代码审查:)
这个结构:
struct secondNear {
char near[8];
char nearOfNear[8];
};
可能是许多错误的根源...为什么不使用
std::string
?然后:
secondNear* sn = new secondNear();
strcpy(sn->near, received->getSender());
strcpy(sn->nearOfNear, received->getNear());
this->near2.push_back(*sn);
除了会泄漏内存之外,它再次变得过于复杂。无需在堆上创建新结构,只需使用堆栈即可。
现在是您的错误:我认为您通过
cModule
获得了许多getSubModule()
类型的活塞,然后free()
而不是delete
...它们具有被类化的感觉(至少根据它们的用法),因此可能是通过new
而不是Xalloc
()创建的关于c++ - omnet++ free():无效的指针,错误134/139,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21709269/