0

要了解内存和 GDI 泄漏是如何发生的,以及如何消除此类泄漏,我正在尝试在 Winforms 中编写示例代码(使用 C)。我编写了在 GUI 上显示一些字符的简单应用程序。

如何使其在内存和 GDI 资源方面泄漏?

4

2 回答 2

1

如果你想泄漏 GDI 资源,那么创建字体或画笔之类的东西而不是处理它们应该可以解决问题,这些基本上真的是你调用DeleteObject释放相关资源(当然,当你退出进程时这些会被清理) .

您可以通过检查列为DeleteObject需要删除的对象的创建来跟踪泄漏,您还可以更高级并检查 PEB 和 TEB 中未完成的 GDI 句柄。EnumObjects在这方面也应该有所帮助。

于 2012-10-11T07:43:24.763 回答
0

我对 GDI 不太熟悉,但是让程序泄漏到其他地方真的很容易。你只需要忘记释放你之前 malloc 的任何内存。

例子:

int someFunc() {
    char* buf = (char*)malloc(50);

    // Do stuff

    // Should free here like this:
    // free(buf);
    return 4;
}

如果您不释放它,那么该内存就会泄漏,因为它无法访问,但仍分配给您的程序。

于 2012-10-11T07:18:30.500 回答