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