CreatePen 不会产生内存泄漏?

CreatePen doesn't create memory leaks?

本文关键字:内存 泄漏 CreatePen      更新时间:2023-10-16

我创建了一个 HPEN 并使用以下代码选择了它:

HPEN hPen = CreatePen(PS_SOLID, 1, RGB(0,0,0));
oldPen = (HPEN)SelectObject(hdc, hPen);

在此之后,我正在绘制一些东西并选择旧笔:

SelectObject(hdc, oldPen);

要查看内存泄漏,我使用:

#define CRTDBG_MAP_ALLOC
#include <crtdbg.h>
/* This in the main function */
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );

如果我关闭应用程序,则不会显示内存泄漏。但我认为如果我不使用 DeleteObject() 删除对象,就会出现内存泄漏。

我已经用这个测试了标志,它起作用了:

int* leak = new int;

所以标志不会有问题。你能帮我解决这个问题吗?或者告诉我更多关于为什么没有显示内存泄漏的信息吗?

谢谢!

CreatePen是一个win32 api函数,它(可能)在Windows内核中分配一些内存,以便在绘制时使用。使用 new/new[] 分配的内存由 C 运行时库分配,因此将由 CRT 调试函数捕获。它们是专门为捕获分配的内存泄漏而创建的 malloc/new/new[]

正如其他人所说,您将无法以这种方式追踪GDI泄漏。

我个人为此目的使用 GDIView 并对此感到满意(如果其他人可以推荐其他工具来跟踪 GDI 泄漏,我将不胜感激)。

此外,您需要在使用完笔后将其删除(DeleteObject(hPen))。

此致敬意。