Ошибка иерархии навигации в omnet: моделирование завершено с кодом выхода: 139

Я пытаюсь перейти на 2-х уровневый модуль, используя следующий код: —

cModule* parentmod = getParentModule();
cModule* grantParentmod = parentmod->getParentModule();

for (cSubModIterator iter(*grantParentmod); !iter.end();iter++)
EV<<"Current module is "<< iter()->getFullName() <<endl;

И вывод:

Current module is notificationBoard
Current module is mobility
Current module is udpApp[0]
Current module is udpApp[1]
Current module is udp
Current module is networkLayer
Current module is routingTable
Current module is interfaceTable
Current module is wlan[0]

Однако, когда я напрямую пытаюсь получить доступ к udpApp [0] через следующий код: —

cModule* parentmod = getParentModule();
cModule* grantParentmod = parentmod->getParentModule();

cModule* udpmod = parentmod->getParentModule()->getSubmodule("udpApp[0]");
EV<<"Current module is "<< udpmod->getFullName() <<endl;

Завершение моделирования во время выполнения со следующей ошибкой: Симуляция завершена с кодом выхода: 139, что означает ошибку сегментации. Однако, если я использую любой другой модуль, такой как «мобильность» вместо «udpApp [0]», то он работает нормально.

Может кто-нибудь, пожалуйста, помогите мне выяснить возможный способ разрешить эту ситуацию.

2

Решение

Вы получаете эту ошибку, потому что вы пытаетесь разыменовать нулевой указатель. Вы получаете нулевой указатель, потому что имя модуля «xyz [123]», данное getSubmodule, не существует. Он не существует, потому что число в квадратных скобках не является частью имени подмодуля, но его индекс в векторе модуля. Имя и индекс должны быть указаны отдельно при обращении к getSubmodule.

1

Другие решения


По вопросам рекламы [email protected]