“無效的內存訪問”——這是一個讓人很頭疼的問題,錯誤很隱蔽,調試很麻煩,新手頭一次遇到這個問題基本束手無策。出現該錯誤的主要原因在于讀取內存越界,特別是使用指針和數組的時候。下面就曾經遇到的情況做一個簡單的總結,以防遺忘。

1.在無線收發機(wlan_port_rx)中出現"Invalid Memory Acess"錯誤,提示"power model"管道階段有誤。利用VC聯合調試發現異常出現在power model管道階段的某數據包指針處,具體原因不明。將原模型的pipeline程序wlan_power換成dra_power,錯誤消失,程序正常運行。

2.子隊列為空,但是沒有做判別就使用op_subq_pk_remove讀取包,由于子隊列為空,所以將讀不到任何數據,提示"Invalid Memory Acess"的錯誤。

3.定義數組大小為MAX_NUM,但是在寫入數組時超出該數組邊界,結果導致"Invalid Memory Acess"的錯誤。
PS:不管是OPNET編程還是VC下的編程,數組越界都是一個常見的問題,切記一定不能出現這種錯誤,不然會痛苦不堪……