用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=""/>现在一点头绪都没有,请高手指点下。

解决方案 »

  1.   

    菜单Project->Options->Compiler->Use Debug DCUs打上勾
    在最后那个end那,用F7进Delphi源码调试一下,看是否能发现什么问题
    另外如果第三方控件的问题可能就不太好处理
    只能一个一个的排除了
      

  2.   

    1、可能的问题: 程序在退出时没有释放资源、程序在退出时释放了不存在的资源;
    2、解决办法:
       确定最后一句end之后还有没有代码,如果还有代码或是继承窗体,则找到下面的代码进行跟踪;
       如果end之后没有代码了,则有可能是第三方控件造成的问题;如果还有什么问题,请加入QQ高级群:9642802 找管理员讨论! 
      

  3.   

    试了很久得出结论是第三方控件引起的,有一个控件VirtualTree我之前是不带包编译的,退出会报错,我现在在search path中去掉相应的路径,runtime package中加入控件的dcp后,程序退出的时候就没有报错了。但是这样改后,我编译程序的时候第一次编译正确,第二次编译报错:找不到tmschema.dcu。这个控件一共有四个dpk:ThemeManager6,VirtualTreesD6,VirtualTreesD6D,VT_AddonsD6。我看到tmschema。pas包含在ThemeManager6.dpk中所以我就把ThemeManager6.dcp加到了运行时库里,但是没有起作用,即使把四个都加上也没用,要编译两次才行。大家有么有碰到这种编译的问题、
      

  4.   

    重新安装一下控件包吧,编之前注意一下,是不是本来 design-time only 的被选成了 design-time and run-time