我安装了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
我想念什么?您的友好回应将不胜感激。
答案 0 :(得分:0)
在调用this-> sendDown(bsmMessage)之后,请考虑OMNeT ++仿真内核拥有的指针。不要在调用此方法后调用delete(bsmMessage)-否则,您将在OMNeT ++发送事件时删除事件(请考虑:有关要发送的帧的所有信息)。
仅删除指向OMNeT ++提供给您的数据的指针(例如,作为接收到数据的事件),即在处理接收到的帧的方法中。