什么是访问冲突(Access Violations),如何排除该类错误

无论何时碰到的访问冲突都意味着你的程序试图访问不能再为你的程序所获得的内存。请注意我用了“不再(No Longer)“获得。在很多场合中遇到访问冲突都是因为试图引用已经释放的对象的指针或者尚未创建的对象的指针。

幸运的是,Win32的内存结构中,每个进程拥有独立的地址空间,因此我们不必担心覆盖其他程序的内存(这个在Win16种是经常遇到的问题)。这也说明了我们如今(actually)可以利用错误对话框中的信息。

当我们碰到访问冲突对话框时,都会有个地址(例如:Access violation at address:?????)。记下这个地址,返回到应用程序中,打开CPU窗口,在CPU窗口中右击鼠标选择Goto address。当对话框出现的时候,输入刚才访问冲突发生的地方,你就到了引起访问冲突的指令。

尽管CPU窗口中所有的都是用汇编语言写的,这并不对你很重要。如果你把滚动条向上滚一点,就可以看到你当前所处的函数。现在,你就知道是哪个函数引起了访问冲突。一旦你知道引起访问冲突的函数,就可以着手在这个函数中设立断点。

不幸的是,不是所有的事情都那么容易,指针错误有时候非常难查找,总的规则是当指针所指向的对象被释放的时候,把这些指针都设置为NULL,你也许还想在厌恶的函数中使用指针前检查它是否为NULL,如果为NULL你可以输出一些排错信息来帮助你查明哪个指针在程序运行时引起了访问错误。

作为最后的手段,你需要能够在那个指针处设立数据断点(data break point) 来检查它何时设为NULL

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值