使用静脉和omnet ++的自定义模块

时间:2019-03-31 01:04:25

标签: omnet++ veins

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

基于几个答案,我在析构函数和finish方法中引入了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);

}

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

  

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

     

如果此错误发生在omnetpp :: cEventHeap内部,则必须为   更改为调用drop()才能删除该对象。

     

如果此错误在omnetpp :: cEventHeap的析构函数和Basic内部发生   安全消息是班级成员

     

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

我想念什么?您的友好回应将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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