Почему я получаю код ошибки 139, если я запускаю этот код?

Я хотел бы знать, почему я могу построить этот проект, но как только 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 ответ

Решение

Насколько я знаю, OMNeT++ начинается с 128 с его кодами ошибок и затем добавляет нормальные системные коды ошибок. Это означает, что 139 = 128 + 11 и 11 - код ошибки для ошибки сегментации.

Следовательно, кажется, вы пытаетесь использовать пространство памяти, которое не выделено или вам не разрешено использовать. Вы должны запустить симуляцию с помощью Valgrind, используя ./memcheck чтобы выяснить, есть ли у вас утечки памяти.

РЕДАКТИРОВАТЬ: После Veins 4.7.1 был введен новый скрипт запуска. Теперь вы можете запустить симуляцию с помощью Valgrind, используя ./run -t memcheck,

Другие вопросы по тегам