小编lil*_*rne的帖子

CD10中的CDialog内存泄漏

我们正在从VC8升级到VC10,并且发现了许多与CDialog相关的内存泄漏.下面的代码使用一个只有许多按钮的CDialog来演示最简单的例子.在VC10中泄漏,但在VC8中它不会:

for (int i = 0; i < 5000; ++i) {
  CDialog* dialog = new CDialog;
  dialog->Create(IDD_LEAKER, 0);
  dialog->DestroyWindow();
  delete dialog;
}
Run Code Online (Sandbox Code Playgroud)

内存使用率不断上升,我们使用大约30个按钮的示例对话框泄漏了Mb的10s.

请注意,上面是一个测试示例,我们已经删除了所有对话框处理代码,在我们的实际代码中,我们有一个派生类并使用PostNcDestroy().

奇怪的是,VC8或VC10中都没有以下代码示例泄漏:

CDialog* dialog = new CDialog;
for (int i = 0; i < 5000; ++i) {
  dialog->Create(IDD_LEAKER, 0);
  dialog->DestroyWindow();
}
delete dialog;

for (int i = 0; i < 5000; ++i) {
  CDialog* dialog = new CDialog;
  delete dialog;
}
Run Code Online (Sandbox Code Playgroud)

我们在这里失踪了什么?

mfc memory-leaks cdialog visual-studio-2010 visual-c++

7
推荐指数
1
解决办法
1667
查看次数