Почему я получаю код ошибки 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
,