要了解内存和 GDI 泄漏是如何发生的,以及如何消除此类泄漏,我正在尝试在 Winforms 中编写示例代码(使用 C)。我编写了在 GUI 上显示一些字符的简单应用程序。
如何使其在内存和 GDI 资源方面泄漏?
要了解内存和 GDI 泄漏是如何发生的,以及如何消除此类泄漏,我正在尝试在 Winforms 中编写示例代码(使用 C)。我编写了在 GUI 上显示一些字符的简单应用程序。
如何使其在内存和 GDI 资源方面泄漏?
如果你想泄漏 GDI 资源,那么创建字体或画笔之类的东西而不是处理它们应该可以解决问题,这些基本上真的是你调用DeleteObject
释放相关资源(当然,当你退出进程时这些会被清理) .
您可以通过检查列为DeleteObject
需要删除的对象的创建来跟踪泄漏,您还可以更高级并检查 PEB 和 TEB 中未完成的 GDI 句柄。EnumObjects
在这方面也应该有所帮助。
我对 GDI 不太熟悉,但是让程序泄漏到其他地方真的很容易。你只需要忘记释放你之前 malloc 的任何内存。
例子:
int someFunc() {
char* buf = (char*)malloc(50);
// Do stuff
// Should free here like this:
// free(buf);
return 4;
}
如果您不释放它,那么该内存就会泄漏,因为它无法访问,但仍分配给您的程序。