我想知道为什么我可以构建这个项目,但是一旦RSU收到消息我就会收到错误139.即使我尝试通过删除插入onData函数中的代码并再次运行项目来解决,仍然不起作用。
TraCIScenarioManager* manager;
TraCICommandInterface* traci;
void TraCIDemoRSU11p::initialize(int stage)
{
BaseWaveApplLayer::initialize(stage);
if (stage == 0) {
manager = TraCIScenarioManagerAccess().get();
traci = manager->getCommandInterface();
traci->trafficlight("0").setProgram("tram_is_not_passing");
}
}
void TraCIDemoRSU11p::onData(WaveShortMessage* wsm)
{
traci->trafficlight("0").setProgram("tram_is_passing");
}
veins版本是4.4,omnet ++版本是5.我认为问题可能是我在初始化函数中得到了traci接口,有没有人可以解释两个模块如何同时使用traci接口?
根据要求,我正在为问题添加更多信息。
....
<tlLogic id="0" type="static" programID="1" offset="0">
<phase duration="500" state="rGrG"/>
</tlLogic>
....
<tls>
<tlLogic id="0" type="static" programID="tram_is_passing" offset="0">
<phase duration="4" state="ryry"/>
<phase duration="20" state="GrGr"/>
</tlLogic>
<tlLogic id="0" type="static" programID="tram_is_not_passing" offset="0">
<phase duration="999" state="rGrG"/>
</tlLogic>
</tls>
答案 0 :(得分:4)
据我所知,OMNeT ++的错误代码从128开始,而不是添加正常的系统错误代码。这意味着139 = 128 + 11和11是分段错误的错误代码。
因此,您似乎正在尝试使用未分配或不允许使用的内存空间。您应该使用./memcheck
使用Valgrind运行模拟,以确定是否存在内存泄漏。
编辑:在Veins 4.7.1之后,新的运行脚本为introduced。现在,您可以使用./run -t memcheck
与Valgrind一起运行模拟。