关闭句柄调用上的句柄异常无效
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:0xC0000008:指定了无效句柄的0x7c90e4ff (ntdll.dll) 的首次机会异常。"
当我中断警告时,我看到它试图关闭的句柄的值为"0x01c90000",这对我来说对于共享 mem 指针来说似乎是合理的。有没有人看到这个实现有问题,或者我应该假设我在其他地方搞砸了其他东西?
你需要
在to_mem_h
上调用CloseHandle()
,而不是在MapViewOfFile()
的返回值上调用(请参阅此处使用MapViewOfFile()
的示例 - 该示例在MapViewOfFile()
的返回值上调用UnmapViewOfFile()
,并在第一个参数上调用CloseHandle()
以MapViewOfFile()
相关文章:
- 为什么这个正则表达式C++在括号表达式中抛出无效范围异常?
- 删除无效地址时C++引发异常
- 如何处理具有无效数据类型的异常
- 你能防止 std::regex 在无效表达式上抛出异常吗?
- 如何避免字符串到整数转换情况下的无效参数异常
- 在无效地址上,boost::asio::ip:::address::from_string 没有引发异常
- (SDL 渲染问题)C++ 引发异常:读取访问冲突.这是无效的
- C 17中的动态异常规格无效
- 终止无效异常(多线程合并排序)
- C++ - 运行 Moses 解码器时区域设置名称无效异常
- 模板类映射构建在stl :: structs的向量上 - 寻找无效的键(stl :: string)并抛出异常
- 在OpenCV中调用stereoRectify会导致异常:帧指针无效
- 部署异常无效
- Sample.exe中0x7537812f处未处理的异常:0xC0020001:字符串绑定无效
- 无效解除分配时的 xmemory0 异常
- 解密密文时出现无效密文异常
- C++异常规范 - 处理无效的异常
- 关闭句柄调用上的句柄异常无效
- C++ 引发异常:读取访问冲突.这是无效的
- C++捕获无效内存异常