我需要在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/