C++ GDI+ 对象内存泄漏/对象太多?

标签 c++ memory-leaks gdi+

我一直在制作一个 C++ 绘图程序,我有一个部分是在一个函数中使用 gdi+ 绘图,所以我每次调用该函数时都需要声明我的图形对象。这显然是错误的,并导致某处泄漏,所以之后正如预期的那样,有些调用会变慢然后突然停止绘制。

我试图在每次完成绘制时清除我的对象,但它似乎无法解决问题。我认为 PEN 对象可能是问题的一部分,但一些见解会非常有帮助 我的代码:

void function()
{
    DWORD pdwGduStartup;
    GdiplusStartupInput GdiStartupInp;
    GdiplusStartup(&pdwGduStartup, &GdiStartupInp, NULL);
    Pen pnPen_Blue(Gdiplus::Color(255, 0, 0, 255), 2.0F);
    Pen pnPen_Green(Gdiplus::Color(255, 255, 0, 255), 2.0F);


    LPCSTR LGameWindow = "MyWindow";
    HWND hGameWindow = FindWindow(NULL, LGameWindow);
    Graphics graphics(GetDC(hGameWindow));
for (int n=10; n>0; n--)
    graphics.DrawLine(&pnPen_Green,0, 0, 0, n);
    GdiplusShutdown(pdwGduStartup);
    graphics.Flush();
}

非常感谢!

编辑:添加的发布 DC 没有做任何事情!

DWORD pdwGduStartup;
GdiplusStartupInput GdiStartupInp;
GdiplusStartup(&pdwGduStartup, &GdiStartupInp, NULL);
Pen pnPen_Blue(Gdiplus::Color(255, 0, 0, 255), 2.0F);
Pen pnPen_Green(Gdiplus::Color(255, 255, 0, 255), 2.0F);


LPCSTR LGameWindow = "MyWindow";
HWND hGameWindow = FindWindow(NULL, LGameWindow);
HDC GDC = GetDC(hGameWindow);
Graphics graphics(GDC);
ReleaseDC(hGameWindow, GDC);
GdiplusShutdown(pdwGduStartup);
graphics.Flush();

我的 GDI 对象仍然增加到 10,000!

最佳答案

必须在删除所有 GDI+ 对象后调用 GdiplusShutdown。在您的代码中,当对象超出范围时,在 GdiplusShutdown 之后调用 Pen 和 Graphics 析构函数。

关于C++ GDI+ 对象内存泄漏/对象太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31471963/

相关文章:

c# - 将 C# 方法转换为 C++ 方法

Javascript 闭包 - 如何防止内存泄漏

c# - 更新后图像未保存,在 c# 中使用 FileStream 或简单位图

java - Cassandra 绑定(bind)语句和内存泄漏

android - java.lang.OutOfMemoryError : android. support.v4.app.BackStackState[] 长度为 1279544898 会溢出

c# - 在 GDI+ 中绘制带渐变的折线

delphi - GDI+ DrawLine 什么都不画

c++ - 条件表达式中的右值引用

C++ 中的 PHP 样式 foreach 循环

C++ istringstream 和空格