我在堆上分配了一个HANDLE数组,然后每个句柄都与一个线程关联。
完成工作后,在调用HeapDestroy()之前,是否必须对它们分别调用CloseHandle()?还是后者的调用使第一个没有用?

最佳答案

完成操作后,请务必合上手柄-这是一个好习惯。 Windows内核具有跟踪分配的句柄及其分配给谁的表,因此记住关闭它们将是您的最大利益。

句柄泄漏也是一个存在的问题,它是在调用者请求一个句柄但没有将其关闭时出现的,并且它们会在一段时间内堆积起来。

您有时还会通过不关闭句柄而引起其他问题(例如,如果您打开了文件的句柄并拒绝了共享,但在不再需要打开的句柄时将其保持打开状态,则共享冲突)。

但是,确切地说,句柄是伪造的-Windows内核会对其进行转换,因为它依赖于内部的,未记录的且未导出的表,该表存储指向链接到该伪造句柄的内核对象的真实指针地址。

关于c - 使用HeapDestroy时需要CloseHandle吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50972271/

10-13 08:10