打开文件对话框和内存泄漏

时间:2014-07-17 19:32:54

标签: c++ windows memory-leaks

我使用此功能在我的win32应用程序中打开文件:

string OpenDialog(HWND hwnd)
{
  OPENFILENAME ofn;
  TCHAR szFile[MAX_PATH];


  ZeroMemory(&ofn, sizeof(ofn));
  ofn.lStructSize = sizeof(ofn);
  ofn.lpstrFile = szFile;
  ofn.lpstrFile[0] = '\0';
  ofn.hwndOwner = hwnd;
  ofn.nMaxFile = sizeof(szFile);
  ofn.lpstrFilter = TEXT("All files(*.*)\0*.*\0");
  ofn.nFilterIndex = 1;
  ofn.lpstrInitialDir = NULL;
  ofn.lpstrFileTitle = NULL;
  ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  if(GetOpenFileName(&ofn))
    return ofn.lpstrFile;

}

这很简单,我称之为:

string path = OpenDialog(hwnd);

问题是我发现此功能会导致大量内存泄漏! 我不是100%确定发生了什么,但每次使用此功能打开一个新文件时,我的应用程序在RAM中变得越来越大。 我100%确定原因是这个功能,因为如果我不使用此功能加载文件,我就会有稳定的内存负载。

请提示吗? 非常感谢!

1 个答案:

答案 0 :(得分:1)

当您调用API时,Windows会加载shell界面&还调用shell扩展处理程序。如果第三方shell扩展dll引入了内存泄漏,则它将不可见。 Windows还通过保留对某些shell对象的引用来进行一些优化,以便在连续打开时更快地加载打开文件对话框。这可能会导致内存使用量增加,您将在第一次加载时看到内存峰值。