“无效的内存访问”——这是一个让人很头疼的问题,错误很隐蔽,调试很麻烦,新手头一次遇到这个问题基本束手无策。出现该错误的主要原因在于读取内存越界,特别是使用指针和数组的时候。下面就曾经遇到的情况做一个简单的总结,以防遗忘。
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下的编程,数组越界都是一个常见的问题,切记一定不能出现这种错误,不然会痛苦不堪……