老哈的学习记录

知其然,更要知其所以然

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

出现的问题:

0x00xxx处未处理的异常 0x000xxx 读取位置0x000xxx时发生访问冲突

中断后查看调用堆栈,没有任何信息,只显示一个地址0x000xxx。

 

出现问题的原因:

出现这种问题一般有以下几个原因:

  1. 数组越界
  2. 指针指向非法地址
  3. 除0--这个其实也是一种越界

 

解决办法:

查找所有数组,指针,以及有除法运算的地方。

 

补充:

      这次调试碰到个奇怪的问题,比如:

int nArr[3];
if (nArr[4] < 3)	//这样的,只是访问越界地址 不一定会导致崩溃 只是结果可能和预想的不同 比如这里可能结果是true也可能是false
{
    return 0;
}

      但是:

nArr[4] = 1;	//这样的,程序必定崩溃 因为对越界地址做了操作,从而导致了内存混乱,致使程序崩溃了

      也就是说:越界的地址可以被访问,但是访问的结果会和预期的不同;但是越界的地址不可被操作,比如赋值,如果操作越界的地址,必然导致程序崩溃。

posted on 2012-07-11 17:05  Aries Lu  阅读(258)  评论(0编辑  收藏  举报