关于MFC父窗口,子窗口的问题

cky77 2018-11-06 05:48:13
emmm.....
我有两个窗口类A,B
在A.h里面声明B b;
然后A.cpp里面OnInitDialog()里 b.create(IDD,this);
//在B.cpp里面include A.h;
在B.cpp 定义了全局变量BYTE* p;
然后在B的按钮函数里p = new BYTE[10];

呃,有点乱....
那么问题来了,我在关闭A窗口的时候,在B里new出来的数组咋销毁?就是我咋找到这个p?

然后我现在关闭A窗口的时候
CDialogEx::OnOK();
//转到其他窗口
然后我看也没有内存泄漏啥的啊,咋回事?
A和B这种关系算父子窗口 吗?
...全文
107 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
mirro 2018-11-16
  • 打赏
  • 举报
回复
栈内存溢出了
cky77 2018-11-09
  • 打赏
  • 举报
回复
溢出啦溢出啦,第一次看到溢出这么高兴
schlafenhamster 2018-11-07
  • 打赏
  • 举报
回复
现在(父窗口A中手动调用各个子窗口B的destroywindow函数。)再看看 ,没 delete【】p;会不会 报 泄漏
cky77 2018-11-07
  • 打赏
  • 举报
回复
总结一下,根据各位大佬教导。在子窗口B增加destroywindow函数,函数里delete掉new出来的变量。
在父窗口A中手动调用各个子窗口B的destroywindow函数。

还有一个疑问没解决就是,为啥我没销毁new出来的变量时候直接关掉父窗口A,这时不报错,不报内存泄漏。
cky77 2018-11-07
  • 打赏
  • 举报
回复
引用 8 楼 schlafenhamster 的回复:
a_Dlg 理的 子窗口 是 Create 出来的, a窗口退出时 必须 destroy b窗口

好的。
schlafenhamster 2018-11-07
  • 打赏
  • 举报
回复
如果 是 父子 关系 , 父窗口 销毁, 子窗口 也会 销毁, A 窗口的 b.create(IDD,this); 对于 b 对话框 只 是 Owner 关系 ?
schlafenhamster 2018-11-07
  • 打赏
  • 举报
回复
a_Dlg 理的 子窗口 是 Create 出来的, a窗口退出时 必须 destroy b窗口
cky77 2018-11-07
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
重载 A 类的 DestroyWindow , 在里面判断销毁

老大你和其他两位老大说的不一样哎
cky77 2018-11-07
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
b.DestroyWindow() 中
delete【】p;
p=0;


嗯,我的A窗口是这样生成的
A a_Dlg;
a_Dlg.DoModal();
我现在在B 的destroyWindow函数里加了delete[] P;然后设了断点。
我在关闭a_Dlg时候,程序并没有运行到B的destroywindow函数里(直接点a_Dlg的窗口上的关闭按钮,或是调CDialogEx::OnOK();或是CDialogEx::DestroyWindow();)
感觉这些窗口没有被释放只是不显示了,请问这是咋回事?
而且我感觉应该报内存泄漏的时候,并没有报错。想不通
cky77 2018-11-07
  • 打赏
  • 举报
回复
引用 12 楼 schlafenhamster 的回复:
现在(父窗口A中手动调用各个子窗口B的destroywindow函数。)再看看 ,没 delete【】p;会不会 报 泄漏


我试了,没有报内存泄漏。
好奇怪。然后查代码时候发现了别的问题,我另外开帖。
qq_42948618 2018-11-06
  • 打赏
  • 举报
回复
各位大神
CPaintDC dc(this);
CDC* pDeskDC = GetDesktopWindow()->GetDC();
CRect rc;
dc.StretchBlt(0,0,100*3,100*3,pDeskDC,m_PosPoint.x,m_PosPoint.y,100,100,SRCCOPY);我想把放大的图像放到非模态对话框的图像控件里(IDC_STATIC3),怎么办?
worldy 2018-11-06
  • 打赏
  • 举报
回复
在B的DestroyWindow()函数,或者在B的释构函数中,加入以下代码 if(p) { delete[] p; p=NULL; }
zgl7903 2018-11-06
  • 打赏
  • 举报
回复
重载 A 类的 DestroyWindow , 在里面判断销毁
schlafenhamster 2018-11-06
  • 打赏
  • 举报
回复
由 然后A.cpp里面OnInitDialog()里 b.create(IDD,this);
中 的 this 指定 b 是 A 的 子窗口
schlafenhamster 2018-11-06
  • 打赏
  • 举报
回复
b.DestroyWindow() 中
delete【】p;
p=0;

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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