[英]Invalid handle exception on CloseHandle call?
在我的應用程序中,我打開了一個共享內存的句柄,該句柄是我讀取/寫入的。 我像這樣打開手柄:
//Map the shared memory
d_to_mbx_mem_arr[idx] = reinterpret_cast<Byte*>(MapViewOfFile(to_mem_h, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
MAILBOX_SIZE_e));
此處設置的變量是Byte *的數組(Byte是無符號字符的別名),因此我進行了重新解釋轉換,因此可以像標准Byte指針一樣使用句柄。
稍后,我嘗試通過以下方式釋放手柄:
CloseHandle(d_to_mbx_mem_arr[p_tool_id]);
d_to_mbx_mem_arr[p_tool_id] = NULL;
由於在CloseHandle之后將值設置為NULL,並且調用此方法的代碼僅是單線程的,我知道我只調用了一次。 但是,當我調用它時,會收到以下警告:
“ FMLib_Comm_Layer.exe中0x7c90e4ff(ntdll.dll)處的首次機會異常:0xC0000008:指定了無效的句柄。”
當我為警告而中斷時,我看到它試圖關閉的句柄的值為“ 0x01c90000”,對於共享的mem指針,這對我來說似乎很合理。 有人看到此實現有問題嗎?還是我應該假設我在其他地方搞砸了?
您需要在to_mem_h
上調用CloseHandle()
,而不是在MapViewOfFile()
的返回值上調用(請參見此處使用MapViewOfFile()
示例-該示例正在對MapViewOfFile()
的返回值調用UnmapViewOfFile()
MapViewOfFile()
並正在調用CloseHandle()
在MapViewOfFile()
的第一個參數上
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.