EAccessViolation 地址访问错误 高手请进

mandarin 2009-10-07 07:26:59
用d6在写一个程序,程序中用到了好多控件,程序在退出时就报下面的错误:

Project fundclient.exe raised exception class EAccessViolation with message 'Access violation at address 00000000. Read of address 00000000'.

我自己跟踪了一下在主程序的最后一句end。后面报出来的。我现在不知道怎么跟踪,用EurekaLog试了下,上面显示最后的call stack 如下:

<ExceptionThread ID="2200" Priority="0" Class="" MainThread="True">
<Line Address="40037EE8" Module="rtl60.bpl" Unit="Classes" Class="" Procedure="StdWndProc" Number="" Offset=""/>
<Line Address="77D2F3C7" Module="user32.dll" Unit="" Class="" Procedure="SendMessageA" Number="" Offset=""/>
<Line Address="77D2F383" Module="user32.dll" Unit="" Class="" Procedure="SendMessageA" Number="" Offset=""/>
<Line Address="400F4602" Module="vcl60.bpl" Unit="Forms" Class="TApplication" Procedure="Destroy" Number="" Offset=""/>
<Line Address="4000572C" Module="rtl60.bpl" Unit="System" Class="TObject" Procedure="Free" Number="" Offset=""/>
<Line Address="40005724" Module="rtl60.bpl" Unit="System" Class="TObject" Procedure="Free" Number="" Offset=""/>
<Line Address="40111EAF" Module="vcl60.bpl" Unit="Controls" Class="" Procedure="DoneControls" Number="" Offset=""/>
<Line Address="40111EA8" Module="vcl60.bpl" Unit="Controls" Class="" Procedure="DoneControls" Number="" Offset=""/>
<Line Address="4011213B" Module="vcl60.bpl" Unit="Controls" Class="" Procedure="Finalization" Number="" Offset=""/>
<Line Address="40006266" Module="rtl60.bpl" Unit="System" Class="" Procedure="FinalizeUnits" Number="" Offset=""/>
<Line Address="40006230" Module="rtl60.bpl" Unit="System" Class="" Procedure="FinalizeUnits" Number="" Offset=""/>
<Line Address="400066E5" Module="rtl60.bpl" Unit="System" Class="" Procedure="_Halt0" Number="" Offset=""/>
<Line Address="4000668C" Module="rtl60.bpl" Unit="System" Class="" Procedure="_Halt0" Number="" Offset=""/>
<Line Address="004EB685" Module="fun.exe" Unit="fun.dpr" Class="" Procedure="" Number="92" Offset="9"/>
<Line Address="7C92DCB8" Module="ntdll.dll" Unit="" Class="" Procedure="ZwSetInformationThread" Number="" Offset=""/>

现在一点头绪都没有,请高手指点下。
...全文
919 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mandarin 2009-10-08
  • 打赏
  • 举报
回复
试了很久得出结论是第三方控件引起的,有一个控件VirtualTree我之前是不带包编译的,退出会报错,我现在在search path中去掉相应的路径,runtime package中加入控件的dcp后,程序退出的时候就没有报错了。

但是这样改后,我编译程序的时候第一次编译正确,第二次编译报错:找不到tmschema.dcu。这个控件一共有四个dpk:ThemeManager6,VirtualTreesD6,VirtualTreesD6D,VT_AddonsD6。我看到tmschema。pas包含在ThemeManager6.dpk中所以我就把ThemeManager6.dcp加到了运行时库里,但是没有起作用,即使把四个都加上也没用,要编译两次才行。大家有么有碰到这种编译的问题、。。。
coderee 2009-10-08
  • 打赏
  • 举报
回复
路过。
mandarin 2009-10-08
  • 打赏
  • 举报
回复
楼上的是什么意思,我没有搞懂??这个设置时再哪的?
Seamour 2009-10-08
  • 打赏
  • 举报
回复
重新安装一下控件包吧,编之前注意一下,是不是本来 design-time only 的被选成了 design-time and run-time
wany97 2009-10-07
  • 打赏
  • 举报
回复
单步跟踪下,看是否还是在最后一句出错。

可能是访问了被释放的对象,
如果涉及数据库,也有可能是访问的数据库那出问题了。
wxsan 2009-10-07
  • 打赏
  • 举报
回复
1、可能的问题: 程序在退出时没有释放资源、程序在退出时释放了不存在的资源;
2、解决办法:
确定最后一句end之后还有没有代码,如果还有代码或是继承窗体,则找到下面的代码进行跟踪;
如果end之后没有代码了,则有可能是第三方控件造成的问题;

如果还有什么问题,请加入QQ高级群:9642802 找管理员讨论!
wintergoes 2009-10-07
  • 打赏
  • 举报
回复
菜单Project->Options->Compiler->Use Debug DCUs打上勾
在最后那个end那,用F7进Delphi源码调试一下,看是否能发现什么问题
另外如果第三方控件的问题可能就不太好处理
只能一个一个的排除了
yktd26 2009-10-07
  • 打赏
  • 举报
回复
是访问到空指针了?
gyk120 2009-10-07
  • 打赏
  • 举报
回复
对象没有释放掉,用工具检测下内存泄露什么的
de410 2009-10-07
  • 打赏
  • 举报
回复
可能是动态创建了对象没有释放造成的~~~
单步跟踪一下~~

5,943

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧