gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:55 25 4
gpt4 key购买 nike

我正在使用这个函数在我的 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% 确定原因是这个函数,因为如果我不使用这个函数加载文件,我有稳定的内存加载。

有什么提示吗?非常感谢!

最佳答案

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

关于c++ - 打开文件对话框和内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24811986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com