“無效的內(nèi)存訪問”——這是一個讓人很頭疼的問題,錯誤很隱蔽,調(diào)試很麻煩,新手頭一次遇到這個問題基本束手無策。出現(xiàn)該錯誤的主要原因在于讀取內(nèi)存越界,特別是使用指針和數(shù)組的時候。下面就曾經(jīng)遇到的情況做一個簡單的總結(jié),以防遺忘。
1.在無線收發(fā)機(jī)(wlan_port_rx)中出現(xiàn)"Invalid Memory Acess"錯誤,提示"power model"管道階段有誤。利用VC聯(lián)合調(diào)試發(fā)現(xiàn)異常出現(xiàn)在power model管道階段的某數(shù)據(jù)包指針處,具體原因不明。將原模型的pipeline程序wlan_power換成dra_power,錯誤消失,程序正常運(yùn)行。
2.子隊列為空,但是沒有做判別就使用op_subq_pk_remove讀取包,由于子隊列為空,所以將讀不到任何數(shù)據(jù),提示"Invalid Memory Acess"的錯誤。
3.定義數(shù)組大小為MAX_NUM,但是在寫入數(shù)組時超出該數(shù)組邊界,結(jié)果導(dǎo)致"Invalid Memory Acess"的錯誤。
PS:不管是OPNET編程還是VC下的編程,數(shù)組越界都是一個常見的問題,切記一定不能出現(xiàn)這種錯誤,不然會痛苦不堪……