【问题标题】:CreatePen doesn't create memory leaks?CreatePen 不会造成内存泄漏?
【发布时间】:2014-05-13 20:21:43
【问题描述】:

我创建了一个 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;

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

谢谢!

【问题讨论】:

标签: c++ winapi visual-c++ memory-management memory-leaks


【解决方案1】:

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

【讨论】:

  • 感谢您的信息!现在将尝试其他工具。
【解决方案2】:

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

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

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

最好的问候。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2010-10-11
    • 1970-01-01
    • 2013-09-03
    • 2014-01-09
    相关资源
    最近更新 更多