首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

求解关闭窗体方法Close的异常

2013-07-01 
求解关闭窗体方法Close的错误?执行程序时点击右上角的关闭按钮可以正常关闭窗体。但是点击退出按钮(执行thi

求解关闭窗体方法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时出错,最倒霉时会只在系统内存紧张时才出错.

热点排行