closeHandle()多次關閉同一個句柄會導致程序奔潰


自己寫了一個升級小工具,在程序結束打算關閉時,竟然奔潰了,最後定位到了

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.  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章