新 X 在作为参数传递给函数时是否会导致 mem 泄漏

Does new X cause a mem leak when passed as an argument to a function?

本文关键字:是否 泄漏 mem 函数 参数传递      更新时间:2023-10-16

Definition of ReadProcessMemory()

ReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, 
                  nSize, SIZE_T * lpNumberOfBytesRead);

这样做有什么问题吗?

ReadProcessMemory(this->processHandle, 0, &ret, sizeof(int), new DWORD);

是的,有问题。

您将无法确定读取了多少字节,因为您无权访问该值,因为临时指针丢失了。

而且您将永远无法释放DWORD对象,因此存在内存泄漏。

在这种情况下,您有内存泄漏。您将无法恢复新DWORD的地址以将其删除。此函数的正确用法是提供现有DWORD的地址,然后读取它。

DWORD bytesRead;
ReadProcessMemory(this->processHandle, 0, &ret, sizeof(int), &bytesRead);
// bytesRead can be read to see how many bytes were read

一个函数接受指向新变量的指针,然后在内部删除它,这很奇怪,但并非不可能。确保在使用库或 API 时仔细阅读文档。