2015-06-08 64 views
2

我试图导航到使用下面的代码2级了模块: -导航层次错误:仿真,退出代码终止:139

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] 

然而,当我试图直接通过下面的代码[0]访问udpApp: -

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

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

模拟结束在运行时以下错误:仿真以退出代码终止:139,这意味着分段故障。但是,如果我使用任何其他模块,如'流动性'而不是'udpApp [0]',那么它工作正常。

任何人都可以请帮我找出一种可能的方法来解决这种情况。

+0

如果您有解决方案,请将其添加到您的问题中,最后一部分......或将其作为自我解决方案发布 – user4786271

+0

找到了解决方法,但肯定没有优化: 'cModule * udpmod; 为(cSubModIterator ITER(* grantParentmod); iter.end();!ITER ++){ 如果 (的strcmp(ITER() - > getFullName(), “udpApp [0]”)== 0){ udpmod = iter(); 休息; } } EV <<“当前模块是”<< udpmod-> getFullName()<< endl; '对于所有具有[0]的模块名称(例如wlan [0]),我得到了分段错误。但是对于名称简单的其他模块,我能够完美地导航。 – Peter

+0

@ user4786271,我为最后的评论道歉,但是堆栈溢出禁止我评论5分钟,因为我已经完成了多个编辑,然后我忘了添加评论。对不起 – Peter

回答

1

由于您试图取消引用空指针,您正在收到此错误。你得到一个空指针,因为给getSubmodule的模块名称“xyz [123]”不存在。它不存在,因为方括号中的数字不是子模块名称的一部分,而是其在模块向量中的索引。名称和索引必须在getSubmodule的调用中单独指定。

+0

谢谢克里斯托夫,你绝对正确。 – Peter

相关问题