解决方法:
右键单击“我的电脑”。单击“属性”。
单击系统属性中的高级。
点击“性能”中的“设置”。
单击性能选项中的数据执行保护。
点击“添加”。选择要运行的程序。
好的.就这么简单。
访问冲突错误的解决方案
访问违规、一般保护故障或无效页面故障,虽然在术语上有所不同,但本质上总是同一类错误造成的。当计算机用户运行的程序试图访问未被指定使用的存储区时,经常会遇到访问冲突。
地址十六进制值的访问冲突
在模块应用程序名称中
读取地址十六进制值
Windows用户可能会经常看到类似“错误:地址836556F8 (004096DA)处的访问冲突”的错误提示。读取地址836556F8 (00401000)”。作为一个Delphi程序开发人员,遇到这种错误的机会比其他用户多(_)。
一旦Windows要在其分配的存储区域之外写入数据信息,就会覆盖其他程序甚至操作系统的命令或数据。一旦出现这种情况,操作系统就会以某种形式瘫痪或关闭,你必须重启电脑。例如,当Windows NT/2000中的下一个程序遇到这个错误时,Watson博士出现并停止程序,捕捉一些快速的细节,然后以文本的形式记录下来。访问冲突是一些Windows程序遇到的最烦人的错误之一。本文的目的是让你在Delphi中找到访问冲突的解决方法。声明一下,Access违规与Microsoft Access无关。
用Delphi开发程序时,我们可以把遇到的访问冲突分为两类:运行时和设计时。
一、设计阶段的准入违规
1.硬件原因
当启动或关闭Delphi IDE并编译一个Delphi项目时,在设计时很容易出现访问冲突。计算机运行时,访问冲突信息可能由各种原因引起,包括系统BIOS、操作系统或硬件驱动程序行。有些声卡,显卡,网卡其实也能造成这种错误。为什么这么说?计算机中的每块卡都有它的设备驱动程序。不同的厂商,不同版本的Windows或者不同版本的Delphi可能会遇到不同的问题。以下步骤可能有助于您解决这些问题:
1.按照必要的步骤验证您安装的驱动程序之间没有冲突。
2.有时降低显示分辨率可能会使一些奇怪的显卡驱动程序更加稳定。
3.如果使用双处理器主板,每个处理器的修改步骤是相同的。
4.注意为计算机上的所有硬件使用最新的驱动程序。
2.软件原因
虽然Windows是英特尔电脑中最受欢迎的操作系统,但由于Windows固有的漏洞和bug,应用程序的误操作可能会导致操作系统迅速瘫痪(有时操作系统本身也会莫名其妙地瘫痪)。选择更稳定的程序开发环境才是解决之道。以下步骤可以帮助您防止一些访问冲突:
(1)虽然Windows 9X相当流行,但Windows NT/2000在很多方面被证明是一个稳定得多的环境,几乎所有的Windows代码平台都是如此。
(2)确保为Windows NT/2000安装了最新的服务包。每次你安装新的服务包,你会发现机器变得稳定。
(3)为您使用的各种版本的Delphi安装最新的更新或补丁(BDE,ADO……)。这是一个提前防止错误的好方法。尽量使用最新的Delphi补丁——Access Violation,错误数量会大大减少,尤其是在设计阶段。
(4)如果你在IDE中经常随机遇到访问违规错误,很可能是你安装了一个坏的控件、包或者向导,不是你正在使用的Delphi版本编写或者编译的。尝试逐个卸载自定义控件(或包),直到问题得到解决,然后联系控件制造商以关注此问题的结果。
(5)检查电脑中是否有与程序冲突的无用的东西。奇怪的软件程序和测试版产品经常导致访问违规错误。
(6)如果系统设置有错误,那么访问违规错误也可能频繁出现。如果您不断遇到带有相同错误消息的访问冲突,请记录这些详细信息,然后通知可能导致此错误的软件制造商。
以上都是我对设计时访问违规错误的建议。
第二,运行时访问冲突
Delphi中常见的运行时访问冲突错误有哪些?如何预防?
任何软件开发都会遇到这样的情况:你写一个程序,测试一下,然后到处发。结果用户告诉你失败了。
您可以考虑使用编译指令{$D}来编译您的程序——Delphi,以创建一个有助于定位访问冲突错误的源代码映像文件。“项目选项”对话框(项目|选项|链接器编译器)允许您指定所需的一切。对于单元文件,调试信息与单元的目标代码一起记录在单元文件中。使用该单元编译程序时,调试信息会增加单元文件的大小和额外的内存开销,但不会影响最终可执行文件的大小和运行速度。包含调试信息和映像文件(项目|选项|链接器)选项的产品只能在{$D}编译指令下完成行信息。
访问违规通常只表现在程序的一个方面。问题刚出现的时候,重要的是考虑用户做了什么,然后从这里寻找突破口。从用户的角度来看,你的程序停止了他们的工作,似乎他们告诉你问题已经导致你推迟解决这个问题。但是,与用户沟通是你发现问题、改进程序的唯一有效途径。
现在,您将知道如何轻松地找到确切的路径、源代码文件和存在访问冲突错误的行(当只给出冲突的地址时):
“搜索-发现错误…”
当出现运行时访问冲突时,用户收到的错误消息类似于以下内容:
地址十六进制值的访问冲突
在模块应用程序名称中
读取地址十六进制值
如果您的程序包含Delphi IDE中的调试信息编译,您可以找到导致此错误的源代码行。
在Delphi程序中,访问冲突错误最常见的原因之一是使用了一个尚未创建的对象。如果第二个地址的十六进制值是FFFFFFF或者000000,十有八九是你的访问?尚未创建对象。例如,您调用一个窗体的事件,但该窗体不是自动创建的,也没有代码实例化。
?程序TfrMain。OnCreate(发件人:to object);
var BadForm:tbad form;
开始
//这里会产生访问冲突
不良形式。刷新;
结束;
假设BadForm在项目选项的“可用表单”窗口列表中是3354。该窗口需要手动创建和释放。在上面的代码中调用BadForm窗口的Refresh方法会导致访问冲突。
如果您在调试器选项窗口中使“在Delphi异常时停止”有效,那么将弹出以下信息:
该消息表明发生了EAccessViolation。EAccessViolation是无效内存访问错误的异常类。
这是你在设计程序时会看到的信息。将出现下一个信息框,然后程序失败:
地址0043F193处的访问冲突
在模块“Project1.exe”中
读取地址000000。
第一个十六进制数字0043F193是访问冲突编译代码(Project1.exe)运行时错误发生的地址。在IDE中选择菜单项“搜索|查找错误.”,在对话框中输入错误地址(0043F193),然后单击“确定”按钮。Delphi将重新编译你的项目文件,然后显示带有运行时错误的代码行。这是一行错误的格式。恢复精神
以下是Delphi环境中访问冲突错误的最常见原因的列表。该列表没有也不可能涵盖所有可能访问冲突。请把你的访问违规信息发在论坛上,大家可以一起尝试解决这个问题。——真实的例子通常比列出的错误要晦涩得多。
1.调用不存在的对象
如上所述,大多数访问冲突的合理原因是使用了尚未创建或已释放的对象。为了防止这种类型的访问冲突,请确保首先创建您访问的任何对象。例如,当一个表位于尚未创建的数据模块中时(从自动生成窗口中删除),您可以在表单的OnCreate事件中打开该表。
在下列程式码中,呼叫已删除物件的事件(b:TBitmap)后,会出现存取违规:
var b:tbit map;
开始
b:=TBitmap。创建;
尝试
//用B对象做一些事情
最后
b .免费;
结束;
.
//由于B已经释放,将出现访问冲突错误
B.Canvas.TextOut(0,0,'这是访问冲突');