gpt4 book ai didi

c++ - CloseHandle 调用中的句柄异常无效?

转载 作者:行者123 更新时间:2023-11-27 23:23:42 29 4
gpt4 key购买 nike

在我的应用程序中,我打开了一个共享内存的句柄,我可以读取/写入共享内存。我这样打开 handle :

//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 是 unsigned char 的别名),所以我进行了重新解释转换,这样我就可以像标准 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”,这对我来说对于共享内存指针来说似乎是合理的。有没有人发现这个实现有问题,或者我应该假设我在其他地方搞砸了?

最佳答案

您需要在 to_mem_h 上调用 CloseHandle(),而不是在 MapViewOfFile() 的返回值上调用(参见使用 的示例code>MapViewOfFile() here -- 该示例在 MapViewOfFile() 的返回值上调用 UnmapViewOfFile() 并调用 CloseHandle ()MapViewOfFile() 的第一个参数上)

关于c++ - CloseHandle 调用中的句柄异常无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10902715/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com