求解关闭窗体方法Close的错误?
执行程序时点击右上角的关闭按钮可以正常关闭窗体。
但是点击退出按钮(执行this->Close();)时候窗体关闭了但是有access violation at address xxxxxxx
in module 'vcl160.bpl' read of address xxxxx 的错误信息。
二种方法都执行FormClose事件但是为什么单击按钮是有内存地址错误呢?
请帮忙解答。
///////////////////////////////////////////////////////////////////////////////////
void __fastcall TcaptureImgFrm::Panel2Click(TObject *Sender)
{
this->Close();
}
///////////////////////////////////////////////////////////////////////////////////
void __fastcall TcaptureImgFrm::FormClose(TObject *Sender, TCloseAction &Action)
{
if (hComm!=INVALID_HANDLE_VALUE)
CloseHandle(hComm);
DSStream_GetVideoStream(glbDB->toadFunc->CapImgSet.icardId, NULL, NULL);
DSStream_DisconnectDevice(glbDB->toadFunc->CapImgSet.icardId);
DSStream_Uninitialize();
delete rptStrLst;
delete rptsj;
delete rptTrvModel;
Action=caFree;
}
[解决办法]
把收尾操作放在FormDestroy里
[解决办法]
你把代码放到FormDestroy试下
还有delete 对象后,最好再设置为NULL
在引用之前先检测一下是否为 非NULL
[解决办法]
我的体会:
关闭异常,多数是程序中有内存越界的情况! 当时没事,而最后程序退出时全面清理时出现问题.
比如你new两段内存,a=new char[10],b=new char[10];
a,b内存的管理数据(delete时会用到)就在a,b的前面,
如果发生a[12]=... 或是a[-1]=..那么运气好当时会出错,
运气不好,会在delete时出错,最倒霉时会只在系统内存紧张时才出错.