2015-06-08 61 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

相關問題