我已经安装了静脉4.7,我完成了教程。一切正常。现在我构建了一个更像DemoBaseApplLayer的新模块。该模块继承自BaseAppLayer。在initialize方法中,我调用dispatchMsg函数。看起来如下:
基于几个答案,我在析构函数和完成方法中引入了cancelAndDelete(msg)。我还添加了删除(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 Safety Message是一个类成员,
omnetpp :: cEventHeap需要在析构函数中调用drop() - 在模块中(Veins :: BSMApp)OBUScenerio.node [0] .appl(id = 7),在t = 1s,事件#2
我错过了什么?您的回复将不胜感激。
调用this-> sendDown(bsmMessage)后,考虑OMNeT ++仿真内核拥有的指针。调用此方法后不要调用delete(bsmMessage) - 否则在OMNeT ++交付时您将删除该事件(想想:有关要发送的帧的所有信息)。
仅删除指向OMNeT ++给您的数据的指针(例如,作为已接收数据的事件),即处理接收帧的方法。