社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 1833阅读
  • 1回复

[代码小知识]解释有时候玩游戏会出现内存不能为"READ"的情况

楼层直达
级别: 光盘中级
发帖
1140
飞翔币
335
威望
303
飞扬币
8460
信誉值
0


[size=12px]QUOTE:
为什么我点开始游戏的时候就会出现"0x004013f0"指令引用的:0x00000000"内存.该内存不能为"read".

这通常是由于,程序的BUG所至,有个位于堆地址(0x004013f0)的对象引用了一个空指针,也就是我们通常所说的指针异常,因为64K以上的内存windows是采取保护措施的,而禁止访问 0- 64K的内存区域.windows是事件驱动的机制,而我们所常说的事件队列,是指你在游戏界面上的一个操作,如点击了鼠标于界面的某一个位置,这时你的操作就被作为消息进入Windows的系统队列,而后再进入每个应用程序的队列,再由应用程序本身的消息处理器进行处理,这时你可以开辟一个独立的线程,也可以使用多个线程,当然后者则要考虑到线程之间的通迅问题!而CPU对数据的处理是分时间片的,而程序的最小块也无法一次性的处理完,所以也会把程序分解成一块块,按照程序入栈的顺序进行处理,打比方这时程序1的一个线程A进入CPU预处理环节之后发现必须先执行程序1的线程B,而线程B则要先调用线程A,这时就会进入一个死循环,也就是线程死锁.也就是死机了.系统在一段时间之后就kill掉死锁的线程,而如果后继程序要调用前面的内容,会发现在内存的此区域的指针已经被释放,取得NULL值,这时就会出现空指针异常的情况,也就是看到的XX地址引用的内存空间地址为不可访问地址(即不为读)!
 
从心选者,用心交流.
级别: *
发帖
*
飞翔币
*
威望
*
飞扬币
0
信誉值
0
只看该作者 1 发表于: 2006-09-27
就这么一点吗,不是吧!