closeHandle()多次关闭同一个句柄会导致程序奔溃

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shanxuezhe/article/details/80362210


自己写了一个升级小工具,在程序结束打算关闭时,竟然奔溃了,最后定位到了

wrHandle =devhandle;

rdHandle = devhandle;

if(wrHandle != INVALID_HANDLE_VALUE)
{
CloseHandle(wrHandle);
wrHandle = INVALID_HANDLE_VALUE;
}


if(rdHandle != INVALID_HANDLE_VALUE){ 
CloseHandle(rdHandle);
rdHandle = INVALID_HANDLE_VALUE;  
}

因为他们的句柄值相等,所以在关闭时,进行了多次关闭,导致程序奔溃,修改如下:


if (wrHandle == rdHandle)
{
CloseHandle(wrHandle);


wrHandle = INVALID_HANDLE_VALUE;
rdHandle = INVALID_HANDLE_VALUE;
}else{ 
if(wrHandle != INVALID_HANDLE_VALUE)
{
CloseHandle(wrHandle);
wrHandle = INVALID_HANDLE_VALUE;
}


if(rdHandle != INVALID_HANDLE_VALUE)

CloseHandle(rdHandle);
rdHandle = INVALID_HANDLE_VALUE;  
}

}


然后程序就ok,再也不会在程序关闭时中断于此了。


参考资料:

1.  

猜你喜欢

转载自blog.csdn.net/shanxuezhe/article/details/80362210