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

Why I get an error code 139 if I run this code?

我想知道为什么我可以构建这个项目,但是一旦 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>

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

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

编辑:在 Veins 4.7.1 之后,一个新的 运行 脚本是 introduced。现在,您可以使用 ./run -t memcheck.

运行 使用 Valgrind 进行模拟