1. 程式人生 > >closeHandle()多次關閉同一個控制代碼會導致程式奔潰

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.