我正在为Windows Mobile应用程序编写CESetup.dll。它必须是不受管理的,对此我几乎没有经验。因此,我不确定是否应该释放分配的内存以及如何执行。
这是我编写的函数:
Uninstall_Init(
HWND hwndParent,
LPCTSTR pszInstallDir
)
{
LPTSTR folderPath = new TCHAR[256];
_stprintf(folderPath, _T("%s\\cache"), pszInstallDir);
EmptyDirectory(folderPath);
RemoveDirectory(folderPath);
_stprintf(folderPath, _T("%s\\mobileadmin.dat"), pszInstallDir);
DeleteFile(folderPath);
// To continue uninstallation, return codeUNINSTALL_INIT_CONTINUE
// If you want to cancel installation,
// return codeUNINSTALL_INIT_CANCEL
return codeUNINSTALL_INIT_CONTINUE;
}
据我了解,folderPath是在堆上分配的。 EmptyDirectory()是我自己的函数,该函数删除目录中的所有内容。 RemoveDirectory()和DeleteFile()是系统调用。
我的问题是我应该在函数退出之前取消分配
folderPath
吗?如果应该,该怎么办? 最佳答案
我认为您想使用此:
delete [] folderPath;
看起来您正在分配TCHAR数组,这是合理的,因为它是字符串。分配数组时,必须使用数组delete运算符(通过在delete语句中包含方括号来获取)进行删除。我很确定Treb的解决方案会导致内存泄漏。