【问题标题】:Custom Module using veins and omnet++使用静脉和 omnet++ 的自定义模块
【发布时间】:2019-03-31 01:04:25
【问题描述】:

我已经安装了静脉 4.7 并完成了教程。一切正常。 现在我构建了一个更像 DemoBaseApplLayer 的新模块。该模块继承自 BaseAppLayer。 在初始化方法中,我调用了一个 dispatchMsg 函数。如下所示:

基于几个答案,我在析构函数和完成方法中引入了 cancelAndDelete(msg)。我还添加了 delete(msg) 方法,但无济于事

dispatchMsg() {

//SignedBSMMessage sgndBSMMsg(location);
char* inputData = signedBSMMessage.CreateBSMMessage(to_CharPtr(this->curPosition.x),
                                                        to_CharPtr(this->curPosition.y),
                                                        to_CharPtr(this->curSpeed.z ),
                                                        to_CharPtr(this->curDirection.z));
cout << "Start dispatchMsg" << endl;

ObuSigndBSM obuSigndBSM("BasicSafetyMessage", 01);
obuSigndBSM.setSignedBsm(inputData);
obuSigndBSM.setMsgLength(signedBSMMessage.getLength());
Coord pos;
traci->getRoadMapPos(pos);
string laneId = std::to_string(pos.z);
obuSigndBSM.setLandId(laneId.c_str());

 bsmMessage=&obuSigndBSM;
this->sendDown(bsmMessage);
//delete bsmMessage;
cout << "End dispatchMsg" << endl;
EV_DEBUG << "BSMApp::dispatchMsg end " ;
delete(bsmMessage);

}

但是,我不断收到此异常:

对象 BasicSafetyMessage 当前位于 (omnetpp::cEventHeap)simulation.scheduled-events,它不能 删除。

如果在 omnetpp::cEventHeap 内部发生此错误,则需要 更改为在删除该对象之前调用 drop()。

如果这个错误发生在 omnetpp::cEventHeap 的析构函数和 Basic 安全信息是班级成员,

omnetpp::cEventHeap 需要在析构函数中调用 drop() -- 在 模块 (Veins::BSMApp) OBUScenerio.node[0].appl (id=7),在 t=1s,事件 #2

我错过了什么?我们将不胜感激。

【问题讨论】:

    标签: omnet++ veins


    【解决方案1】:

    调用 this->sendDown(bsmMessage) 后,考虑 OMNeT++ 仿真内核拥有的指针。调用此方法后不要调用 delete(bsmMessage) - 否则您将在 OMNeT++ 传递事件时删除事件(想想:关于您要发送的帧的所有信息)。

    仅删除指向 OMNeT++ 提供给您的数据的指针(例如,作为已接收数据的事件),即在处理接收帧的方法中。

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多