首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟运行时错误:对象当前在(omnetpp::cEventHeap)simulation.scheduled-events中

模拟运行时错误:对象当前在(omnetpp::cEventHeap)simulation.scheduled-events中
EN

Stack Overflow用户
提问于 2020-07-30 15:22:46
回答 1查看 516关注 0票数 0

我在使用OMNeT++ IDE方面非常新,我想使用一些“无限数组”在我的消息中存储一些数据。我的代码很好,没有任何错误,但是当我启动模拟时,它就会立即停止。我已经签入了debug mod,并且它确实启动了,但是当我应该使用此消息时,我得到了以下运行时错误:

运行时错误:对象当前在(omnetpp::cEventHeap)simulation.scheduled-events,中,无法删除。如果在omnetpp::cEventHeap中发生此错误,则需要将其更改为调用drop(),然后才能删除该对象。如果此错误发生在omnetpp::cEventHeap的析构函数中并且是类成员,则omnetpp::cEventHeap需要在析构- in模块中调用drop() .

只有当我在另一个模块中发送消息时,此错误才会出现。

经过进一步的检查,我发现这是由于我使用的是“无限数组”:

My message实现 .msg

代码语言:javascript
复制
packet Msg_event_data
{
    string name_event_data;
    int clock;
    int map_left_column[]; //infinite array n°1
    int map_right_column[]; //infinite array n°2
}

这就是我从调试器中得到的:调试器报告

从所有这些情况来看,我认为应该在消息的析构函数方法中使用drop()函数,但是我不确定,而且我还没有成功地在这些无限数组中使用它。

这是我的消息析构函数方法

代码语言:javascript
复制
Msg_event_data::~Msg_event_data()
{
   delete[] this->map_left_column; //auto generated by omnet++
   delete[] this->map_right_column;//auto generated by omnet++
}

能帮个忙吗?我被困在这..。

PS :我在英特尔-i7的Win-64操作系统上使用了最新版本的OMNET++。(2020年7月30日)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 10:48:20

这与“无限”数组或其他什么无关。错误消息的原因是您试图删除消息队列中已排定的数据包。这意味着您创建了一个数据包(Masg_event_data),在使用send()调用将其发送出去之后,您保留了它的指针,然后在代码中的其他地方重用了该指针,并尝试删除它。在将消息/数据包传递给send()scheduleAt()之后,您应该忘记指向它的所有指针,并且永远不要取消对它的引用。下一次,当消息被处理到目标模块的handleMessage()函数时,您可以处理这个包。此时,它将从事件队列中删除,您可以随意删除它。

根据调试器堆栈跟踪,此错误发生在TDMA::sendMessageBurst()函数中。您要删除称为sendMessageBurst的函数中的数据包吗?这在语义上肯定是不正确的,但是如果没有看到和理解上面的功能体,就不可能知道如何/为什么.因此,至少应该在这个问题中包括TDMA::sendMessageBurst()TDMA::initialize()()代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63176370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档