句柄与资源管理:如何判断句柄有效性与资源释放

句柄与资源管理:如何判断句柄有效性与资源释放

句柄相当于一个指向指针的指针,指向指针的指针同样是指针,所以暂且认为它是一个指针,那么CreateFile相当于new 分配一个资源,让这个指针指到这块资源的首地址,那么当CloseHandle(handle)后等于是delete操作。此时handle的值还在,但是资源已被释放掉,那这个时候如果去访问这个句柄,就等于访问一个非法的内存资源。那么现在回到这个问题,如何判断句柄是否有效,就好比是回答如何判断指针是否有效。大家知道指针就是地址,如何判断地址是否有效呢?那就是判断这块地址上是否有有效数据了?那如何判断这个地址上有有效数据呢?微软提供了API,讲到这里问题基本就迎刃而解,希望楼主给分给我啊。答案另起一行 答案: Tests a memory address to make sure it represents a currently active memory block that was allocated by the diagnostic version of new. BOOL AfxIsMemoryBlock( const void* p, UINT nBytes, LONG* plRequestNumber = NULL ); 或者: Tests any memory address to ensure that it is contained entirely within the program's memory space. BOOL AfxIsValidAddress( const void* lp, UINT nBytes, BOOL bReadWrite = TRUE );

相关推荐

钤印的印泥正确使用方法
365bet在线开户

钤印的印泥正确使用方法

10-26 👁️‍🗨️ 4495
电磁炉用平底锅质量评定
bte365体育

电磁炉用平底锅质量评定

10-25 👁️‍🗨️ 700
绿豆水煮多长时间清热解毒去火 绿豆水开花解毒还是不开花解毒
Walksnail Avatar 高清护目镜 X
bte365体育

Walksnail Avatar 高清护目镜 X

08-19 👁️‍🗨️ 3430
飞机上吸烟的最新处罚规定是什么?
365bet在线开户

飞机上吸烟的最新处罚规定是什么?

10-11 👁️‍🗨️ 3025
中国移动注销账号方法
365bet有手机版吗

中国移动注销账号方法

07-30 👁️‍🗨️ 9656
为什么王者荣耀成年后显示未成年? 王者成年为什么还说未成年
复合肥是什么肥料 复合肥的作用与功效有哪些
bte365体育

复合肥是什么肥料 复合肥的作用与功效有哪些

08-18 👁️‍🗨️ 6130
河鳗的习性,河鳗好吃吗?如何钓河鳗的技巧
bte365体育

河鳗的习性,河鳗好吃吗?如何钓河鳗的技巧

09-01 👁️‍🗨️ 4169