出现的问题:
0x00xxx处未处理的异常 0x000xxx 读取位置0x000xxx时发生访问冲突
中断后查看调用堆栈,没有任何信息,只显示一个地址0x000xxx。
出现问题的原因:
出现这种问题一般有以下几个原因:
- 数组越界
- 指针指向非法地址
- 除0--这个其实也是一种越界
解决办法:
查找所有数组,指针,以及有除法运算的地方。
补充:
这次调试碰到个奇怪的问题,比如:
int nArr[3]; if (nArr[4] < 3) //这样的,只是访问越界地址 不一定会导致崩溃 只是结果可能和预想的不同 比如这里可能结果是true也可能是false { return 0; }
但是:
nArr[4] = 1; //这样的,程序必定崩溃 因为对越界地址做了操作,从而导致了内存混乱,致使程序崩溃了
也就是说:越界的地址可以被访问,但是访问的结果会和预期的不同;但是越界的地址不可被操作,比如赋值,如果操作越界的地址,必然导致程序崩溃。