如果我运行此代码,为什么会收到错误代码139?

时间:2017-03-09 05:01:23

标签: omnet++ veins

我想知道为什么我可以构建这个项目,但是一旦RSU收到消息我就会收到错误139.即使我尝试通过删除插入onData函数中的代码并再次运行项目来解决,仍然不起作用。

TraCIDemoRSU11p.h

TraCIScenarioManager* manager;
TraCICommandInterface* traci;

TraCIDemoRSU11p.cc

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接口?

编辑:

根据要求,我正在为问题添加更多信息。

Cross.net.xml

....
<tlLogic id="0" type="static" programID="1" offset="0">
    <phase duration="500" state="rGrG"/>
</tlLogic>
....

Cross.tls.xml

<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>

1 个答案:

答案 0 :(得分:4)

据我所知,OMNeT ++的错误代码从128开始,而不是添加正常的系统错误代码。这意味着139 = 128 + 11和11是分段错误的错误代码。

因此,您似乎正在尝试使用未分配或不允许使用的内存空间。您应该使用./memcheck使用Valgrind运行模拟,以确定是否存在内存泄漏。

编辑:在Veins 4.7.1之后,新的运行脚本为introduced。现在,您可以使用./run -t memcheck与Valgrind一起运行模拟。