首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用veins和omnet++的定制模块

使用veins和omnet++的定制模块
EN

Stack Overflow用户
提问于 2019-03-31 01:04:25
回答 1查看 223关注 0票数 3

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

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

代码语言:javascript
复制
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当前在BasicSafetyMessage中,无法删除。 如果在omnetpp::cEventHeap中发生此错误,则需要将其更改为调用drop(),然后才能删除该对象。 如果此错误发生在omnetpp::cEventHeap的析构函数和基本安全消息是类成员中, cEventHeap需要调用destructor - in模块中的drop(),OBUScenerio.node.appl (id=7),at t=1s,事件#2

我错过了什么?您的答复将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2019-04-02 23:47:25

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55436991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档