我正在为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的解决方案会导致内存泄漏。

08-28 10:26