内存泄露问题,请帮忙

xinhe007 2003-08-11 04:22:20
动态创建控件时的问题.
开始运行没有问题,但在程序里多取几次n的值就会出错,请问这是怎么回事?
如何解决????
int n=ADOQuery2->FieldCount;
for(int i=0;i<11;i++)
{
if(TEdit2[i]!=NULL)
{
TEdit2[n]->Free();
DLabel[n]->Free();
}
}
for(int i=0;i<n;i++)
{
TEdit2[i]=new TEdit(this);
DLabel[i]=new TLabel(this);
}
...全文
97 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinhe007 2003-08-12
  • 打赏
  • 举报
回复
多谢
vachel 2003-08-11
  • 打赏
  • 举报
回复
你说话顺序太乱,能不能说的具体一些?例如:TEdit2和DLabel两个组什么时候建立,什么时候删除?
duduwolf 2003-08-11
  • 打赏
  • 举报
回复
你没有给出具体的edit和label new时候的代码,我怀疑你的TEdit[n]虽然不等于空,但并不等于DLabel[n]也不等于空啊!还有,你不要用递增来遍历,尝试一下用递减
zjqyb 2003-08-11
  • 打赏
  • 举报
回复
你不应该use
TEdit2[i]->Free();
DLabel[i]->Free();
去析构
何况析构后TEdit2[i]也不可能为NULL
必须自己Tedit2[i]=NULL


delphi中use :FreeAndNil(TEdit2[i])
hongwuzhao 2003-08-11
  • 打赏
  • 举报
回复
看不出什么意思?i,n,11
int n=ADOQuery2->FieldCount;
for(int i=0;i<11;i++) //11???
{
if(TEdit2[i]!=NULL) //i???
{
TEdit2[n]->Free(); //n???
DLabel[n]->Free(); //n???

}
}
for(int i=0;i<n;i++)
{
TEdit2[i]=new TEdit(this);
DLabel[i]=new TLabel(this);
}

xinhe007 2003-08-11
  • 打赏
  • 举报
回复
用了zjqyb() 的方法后,问题好像解决了,至少现在我切换了好几次都没出现问题.
但zjqyb()你能告诉我为什么吗?
zjqyb 2003-08-11
  • 打赏
  • 举报
回复
int n=ADOQuery2->FieldCount;
for(int i=0;i<n;i++) //11???
{
if(TEdit2[i]!=NULL) //i???
{
delete TEdit2[i];
TEdit2[i]=NULL;

}
if(DLabel[i]!=NULL) //i???
{
delete DLabel[i];
DLabel[i]=NULL;

}
}
for(int i=0;i<n;i++)
{
TEdit2[i]=new TEdit(this);
DLabel[i]=new TLabel(this);
}
xinhe007 2003-08-11
  • 打赏
  • 举报
回复
对不起,开始代码写错了点,现更正如下
int n=ADOQuery2->FieldCount;
for(int i=0;i<11;i++) //i是循环变量,
{
if(TEdit2[i]!=NULL)
{
TEdit2[i]->Free(); //在这里删除
DLabel[i]->Free();

}
}
for(int i=0;i<n;i++) //n总是小于11
{
TEdit2[i]=new TEdit(this); //在这里创建
DLabel[i]=new TLabel(this);
}
xinhe007 2003-08-11
  • 打赏
  • 举报
回复
edit和lable是同时创建,也同时删除,窗体show的时候创建,但每次创建之前把原来创建的删除
n是数据表的字段数,总是n<11,循环变量,创建和删除的代码都在上面了

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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