关于网友提出的“ 程序出现Access violation at address 00428C12 ”问题疑问,本网通过在网上对“ 程序出现Access violation at address 00428C12 ”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 程序出现Access violation at address 00428C12描述:
我的程序运行后出现"Access violation at address 00428C12 in module 'MyData.exe'. Read of address 013DC003"错误。确定后可继续正常运行。而且在别的终端机器上不会出现这个错误。
请问这一般是什么原因造成的?如何找出引起错误的地方(我的机器上无法复现这个错误)
解决方案1:
准确的讲,这种情况是因为有指针悬挂出现的,其实在Delphi内中许多东西严格来讲都是指针。这种错误会因为软件、硬件等因数而出现,所以说在你的机器上没有这种错误而在别的机器上有就很正常了。建议你在程序中寻找以下问题:
1。是不是动态创建了某个对象而没有释放?
2。有没有使用指针后没有释放?
3。是不是在使用以上(对象、指针)以前释放了?
[1]访问了没有创建的对象;[2]第三方控件在目标机器没有正确注册。我们以前遇到过第二种情况,愣是找不到原因。可以参考一下。
解决方案3: 资源释放问题,检查所有的有内存分配和释放的地方,最好释放内存后给它写成0,释放前检查是否为0。
还有就是组件的自释放问题,也留意一下是不是多次释放。如果是多线程的,检查一下线程执行顺序和结束时对资源的管理。
升级目标机器的环境到最新的sp,最新的MDAC和JET数据库驱动。
我遇到过这种情况,在按Button键动态Create一个窗口时,
首先Form2:=TForm2.Create(Application)新生成了一个Form2窗口,
再在Form2的Create事件中写入Self.Show,程序运行到这出错,报错好象也一样,
跳过去程序也能运行,Form2窗口也出来了,后来我把Self.show改成Form2.show
就没问题了,
我觉得可能是你的子窗口是动态创建,但CLOSE事件没写或写错了
action:=cafree;
frm_name:=nil;
通常Frm_Name写错了,就会出现问题。
应该事内存存储错误了,两个原因
1、窗体的创建或释放不对,没有完全释放,导致在内存存储冲突了
2、数据库的链接不正确,不知道你是不是动态链接的,最好事动态链接
我也遇到过,有一个可能是某个第三方控件安装不正确
还有可能就是程序自身的问题了,比如棒棒糖说的,资源释放出错
应该是程序本身问题,可能是多次重复释放了同1个资源
解决方案9:网上下载MDAC_TYP26.EXE以上版本,安装