c++ - HBITMP 的 WIndows 函数 DestroyObject 不能很好地工作(内存泄漏)

标签 c++ memory-leaks hbitmap

我需要在C++程序中经常创建HBITMAP图像,当然我需要在使用后删除这些位图。 代码类似这样

HBITMAP hBmp;
while(true) {
  hBmp = CreateBitmap(width, height, 1, 8, imageData);
  process(hBmp);
  DeleteObject(hBmp);
}

我在一个连续创建 HBITMAP 的线程中有一个无限循环,调用一个使用此位图的函数,然后删除它。在循环开始时,我检查进程内存使用量是否大于前一个循环,如果是,我打印它。 使用 CreateBitmap() 和 DeleteObject() 会导致少量内存泄漏;进程内存使用量偶尔增加 4KB(有时每 10 秒一次,有时几分钟没有任何反应)。

我也没有调用进程函数来测试它,问题仍然存在,所以我认为是由于位图处理。 此外,我做了另一个测试,在无限循环之外创建图像(所以我只创建一次)并在循环中处理它无限次,并且没有发生内存泄漏。

注意:DeleteObject() 始终返回值 >0(无错误)。

问题是否可能与 DeleteObject() 函数有关?这样创建/删除位图有什么问题吗?

技术说明: window XP Borland C++ Builder 5

最佳答案

是否有可能在某处的设备上下文中仍然选择了位图?这可能会导致 DeleteObject 失败,尽管我预计它会返回错误。

关于c++ - HBITMP 的 WIndows 函数 DestroyObject 不能很好地工作(内存泄漏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6034118/

相关文章:

C++ 什么是 "instantiated from here"错误?

c++ - 正确关闭 WinAPI HANDLEs(避免重复关闭)

winapi - 使用 Windows GetDIBits 函数获取位图像素值

iphone - 如何使用 XCode 4 中的 Leaks 识别泄漏对象?

java - freeMemory()在没有任何请求的情况下在tomcat中每隔一小时下降一次

c++ - 来自 HBITMAP 的 QImage

c++ - 结构链接到链表

c++ - 用于创建库的 header 是否必须与使用库的 header 相同

C++ 别名规则

ios - 在循环中使用 dataWithContentsOfURL 内存泄漏