[英]OMNet++ | Simulation Runtime error : Object is currently in (omnetpp::cEventHeap)simulation.scheduled-events
我在使用 OMNeT++ IDE 方面很新,我想使用一些“无限数组”在我的消息中存储一些数据。 我的代码很好,没有任何错误,但是当我启动模拟时,它会立即停止。 我已经检查了调试模块,它确实启动了,但是当我应该使用此消息时,我收到以下运行时错误:
出现运行时错误:Object 当前在 (omnetpp::cEventHeap)simulation.scheduled-events 中,无法删除。 如果在 omnetpp::cEventHeap 中发生此错误,则需要将其更改为调用 drop() 才能删除该 object。 如果此错误发生在 omnetpp::cEventHeap 的析构函数中并且是 class 成员,则 omnetpp::cEventHeap 需要在析构函数中调用 drop() -- 在模块中...
只有当我只是在另一个模块中发送消息时,才会出现此错误。
经过进一步检查,我发现这是由于我使用的是“无限数组”:
我的消息实现.msg
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() function,但我不确定,我还没有成功地使用这些无限的 arrays。
这是我的消息析构方法:
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:我在带有 Intel-I7 的 Win-64 操作系统上使用实际最新版本的 OMNET++。 (2020 年 7 月 30 日)
这与“无限” arrays 或其他无关。 错误消息的原因是您试图删除已安排在消息队列中的数据包。 这意味着您创建了一个数据包 (Masg_event_data),并在使用send()
调用将其发送出去后,您保留了它的指针,然后在代码中的其他地方重用该指针并尝试删除它。 将消息/数据包传递给send()
或scheduleAt()
后,您应该忘记所有指向它的指针,并且永远不应该取消引用它。 下次当消息被处理到目标模块的handleMessage()
function 时,您可以使用此数据包。 此时,它会从事件队列中删除,您可以随意删除它。
根据调试器堆栈跟踪,此错误发生在TDMA::sendMessageBurst()
function 中。 您正在删除 function 中名为sendMessageBurst
的数据包? 这在语义上肯定是不正确的,但是如果没有看到和理解上面的 function 主体,就不可能知道如何/为什么......所以,至少TDMA::sendMessageBurst()
和TDMA::initialize()()
代码应该包含在这个问题中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.