现在做一个项目,有30多个窗口,有的窗口中有大量的图片,每一个窗口运行后都很占资源。我现在的处理方法是只保留一个主窗口(做为程序的背景),其他窗口均在运行时才创建,并以showModal方式打开,窗口操作完成后释放本窗口资源,现在程序运行后发现窗口关闭后其占用的内存资源并没有释放,请问各位网友该如何处理,才能释放掉其占用的资源?
8 个解决方案
#1
一般都用delete 来释放的啊,你又怎么知道内存资源并没有释放呢~~
#2
第2次打开该窗口时加一判断:如窗口Form1,在打开前用以下语句:
if (Form1 != NULL)
而窗口打开过以后Form1均不为NULL,再一个有时一个窗口有Timer控件,窗口关闭后Timer控件还在执行,所以我认为窗口占用的内存资源没有释放
if (Form1 != NULL)
而窗口打开过以后Form1均不为NULL,再一个有时一个窗口有Timer控件,窗口关闭后Timer控件还在执行,所以我认为窗口占用的内存资源没有释放
#3
这么少的分实在不想回答
#4
#include "Unit2.h"
....
TForm2 *dlg=new TForm2(NULL);
try
{
//初始化
dlg->Caption="对话框";
if(mrOk==dlg->ShowModal())
{
//对话框按“确定”关闭的处理
}
}
__finally
{
delete dlg; //释放
dlg=NULL;
}
....
....
TForm2 *dlg=new TForm2(NULL);
try
{
//初始化
dlg->Caption="对话框";
if(mrOk==dlg->ShowModal())
{
//对话框按“确定”关闭的处理
}
}
__finally
{
delete dlg; //释放
dlg=NULL;
}
....
#5
不直接用delete也可以(其实用Show显示的Form,根本就无法使用delete),就是在
Form的OnClose事件里,加上Action = caFree; 就可以了(这个方法比较通用,对于
Show和ShowModal显示的窗口都适用)。
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
Form的OnClose事件里,加上Action = caFree; 就可以了(这个方法比较通用,对于
Show和ShowModal显示的窗口都适用)。
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
#6
季老大说的对,对于Show的情况,可以使用Action = caFree 自动释放。
但是要注意:当主窗体new了二级窗体,返回的指针最好不要保存和使用,因为
保存了也没有用,当二级窗体把自己释放了的时候,主窗体根本不知道,
保存的指针就成了“野指针”,再使用它,会AV的。
但是要注意:当主窗体new了二级窗体,返回的指针最好不要保存和使用,因为
保存了也没有用,当二级窗体把自己释放了的时候,主窗体根本不知道,
保存的指针就成了“野指针”,再使用它,会AV的。
#7
感谢楼上兄弟们的回复,我现在用的方法和“jishiping(JSP 季世平)”一样,再加上Form2 = NULL,不过myy兄弟的方法对其他指针很通用,值得学习。
分数真的给少了,楼上几位兄弟将就一下吧
分数真的给少了,楼上几位兄弟将就一下吧
#8
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
#1
一般都用delete 来释放的啊,你又怎么知道内存资源并没有释放呢~~
#2
第2次打开该窗口时加一判断:如窗口Form1,在打开前用以下语句:
if (Form1 != NULL)
而窗口打开过以后Form1均不为NULL,再一个有时一个窗口有Timer控件,窗口关闭后Timer控件还在执行,所以我认为窗口占用的内存资源没有释放
if (Form1 != NULL)
而窗口打开过以后Form1均不为NULL,再一个有时一个窗口有Timer控件,窗口关闭后Timer控件还在执行,所以我认为窗口占用的内存资源没有释放
#3
这么少的分实在不想回答
#4
#include "Unit2.h"
....
TForm2 *dlg=new TForm2(NULL);
try
{
//初始化
dlg->Caption="对话框";
if(mrOk==dlg->ShowModal())
{
//对话框按“确定”关闭的处理
}
}
__finally
{
delete dlg; //释放
dlg=NULL;
}
....
....
TForm2 *dlg=new TForm2(NULL);
try
{
//初始化
dlg->Caption="对话框";
if(mrOk==dlg->ShowModal())
{
//对话框按“确定”关闭的处理
}
}
__finally
{
delete dlg; //释放
dlg=NULL;
}
....
#5
不直接用delete也可以(其实用Show显示的Form,根本就无法使用delete),就是在
Form的OnClose事件里,加上Action = caFree; 就可以了(这个方法比较通用,对于
Show和ShowModal显示的窗口都适用)。
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
Form的OnClose事件里,加上Action = caFree; 就可以了(这个方法比较通用,对于
Show和ShowModal显示的窗口都适用)。
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
#6
季老大说的对,对于Show的情况,可以使用Action = caFree 自动释放。
但是要注意:当主窗体new了二级窗体,返回的指针最好不要保存和使用,因为
保存了也没有用,当二级窗体把自己释放了的时候,主窗体根本不知道,
保存的指针就成了“野指针”,再使用它,会AV的。
但是要注意:当主窗体new了二级窗体,返回的指针最好不要保存和使用,因为
保存了也没有用,当二级窗体把自己释放了的时候,主窗体根本不知道,
保存的指针就成了“野指针”,再使用它,会AV的。
#7
感谢楼上兄弟们的回复,我现在用的方法和“jishiping(JSP 季世平)”一样,再加上Form2 = NULL,不过myy兄弟的方法对其他指针很通用,值得学习。
分数真的给少了,楼上几位兄弟将就一下吧
分数真的给少了,楼上几位兄弟将就一下吧
#8
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!
吉林省什么都慢半拍!!!!