omn​​et ++ free():指针无效,错误134/139

时间:2014-02-11 17:49:06

标签: c++ omnet++

我正在开发一个关于模拟p2p网络协议的Omnet ++和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()...

向节点发送消息时项目崩溃

1 个答案:

答案 0 :(得分:1)

免费但简短的代码审核:)

这个结构:

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()类型的ponters,然后你free()代替了delete ...他们有作为课程的感觉(至少根据他们的用法),所以他们可能是通过new创建的,而不是Xalloc()