Violation(非法访问),General Protection Fault(一般保护性错误)或者Invalid Page Fault(无
效页面错误),虽然说法不一样,但本质上总是由同一种错误引起的。Access Violation常常在计算机
用户运行的程序试图存取未被指定使用的存储区时遇到。
Access violation at address <十六进制值>
in module <应用程序名>
Read of address <十六进制值>
Windows用户可能经常会看到类似于错误提示:“Error:Access violation at address 836556F8
(004096da). Read of address 836556F8(00401000)”。作为一个Delphi程序开发者,遇到这种错
误的机会比其他用户更多(^_^)。
一旦Windows要在它被分配的存储区之外写数据信息,它就会覆盖其他程序甚至操作系统的命令或数
据。一旦发生了这种情况,操作系统将会瘫痪或者以某种形式关闭,你必须重新启动计算机。例如,在
Windows NT/2000下一个程序遇到这种错误时,Dr. Watson出现并且停止了该程序,捕获了一些快速的细
节状态,再把它们用文本形式记录下来。Access Violation是某些最令人气恼的Windows程序遇到的错误
之一。本文的目的就是让你找到Delphi中Access Violation的解决之道。首先声明一点,Access
Violation和Microsoft Access没有任何关系。
用Delphi开发程序时,我们可以把遇到的Access Violation分成两大类:运行期和设计期。
一、设计期的Access Violation
1.硬件原因
在启动或关闭Delphi IDE以及编译一个Delphi工程时容易出现设计期的Access Violation。在你的
计算机运行中出现Access Violation信息可能由各种各样的原因引起,包括系统BIOS、操作系统或者是
硬件驱动线,有些声卡、显卡、网卡实际上也会导致这种错误。为什么这么说?
计算机里的每一块卡都
有它的设备驱动程序。对于不同的制造商、不同版本的Windows或者不同版本的Delphi都可能会遇到不同
的问题。如下的几个步骤可能有助于你解决遇到的这些问题:
1. 按照必要的步骤来证实你安装的驱动程序之间没有冲突。
2. 有时降低显示分辨率可能会使某些古怪的显卡驱动程序稳定一些。
3. 如果使用双处理器的主板,则保证对每个处理器的修改步骤一样。
4. 对于计算机上的所有硬件注意使用最新的驱动程序。
2.软件原因
尽管Intel的计算机中Windows是最流行的操作
系统,由于Windows系统天生的脆弱性和BUG,应用程
序的误操作可能导致操作系统的迅速瘫痪(有时操作系统本身也会莫名其妙的瘫痪)。选择一个更稳定
的程序开发环境是解决之道,如下几个步骤可以帮助你防止某些Access Violation的发生:
(1)尽管Windows 9X相当流行,Windows NT/2000
还是从多方面被证实是一个稳定得多的环境,几
乎对于所有的Windows代码平台而言都是这样。
(2) 确保对于Windows NT/2000已经安装了最新的service pack。每次安装完新版的service pack,你
会发现机器变得稳定了。
(3) 为你使用的各种版本的Delphi装上当前的更新或补丁(BDE、ADO……),这是提前预防错误的好
办法。尽量使用最新的Delphi补丁——Access Violation错误数量尤其是
设计期的错误数会大大减少。
(4)如果你在IDE中经常随机遇到Access Violation错误,很有可能是你安装了一个不好的控件、包或
者一个向导,它不是你使用的版本的
Delphi所编写或编译的。试着一个一个卸载定制的控件(或者包)
直到问题被解决,然后联系控件厂商关注这个问题的结果。
(5) 检查一下计算机里是否有没用的东西和程序冲突。奇怪的软件
程序和测试版的产品常常会导致
Access Violation错误。
(6) 如果系统设置有错误,那么Access Violation错误可能也会经常出现。如果你不停地遇到一个错
误提示信息一样的Access Violation,记录下这些细节,然后通知可能导致这个错误的
软件制造厂商。
这些