首页 > 解决方案 > 由于 Windows 10 上共享内存中无法访问的内存而导致崩溃

问题描述

我使用创建共享内存CreateFileMapping并使用以下方法获取视图MapViewOfFile

  HANDLE hMappedFile =
    CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, DWORD(nSharedMemorySize), L"some-file-identifier")

void* lpViewOfData = MapViewOfFile(m_hMappedFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);

lpViewOfData然后我投到unsigned int *

unsigned int *address= reinterpret_cast<unsigned int *>(lpViewOfData)

写入时address,进程崩溃

for(size_t i=0; i<len; ++i){ // len is not out-of-rangle
    address[i] = i;
}

我用windbg转储了内存并??在共享内存中获取了一些,这意味着根据??未映射的地址 在内存位置

000001c7`47bc0ff0  00000b18 00000b1a 00000c79 00000b1a
000001c7`47bc1000  ???????? ???????? ???????? ????????
...// bad
000001c7`47bc1ff0  ???????? ???????? ???????? ????????
000001c7`47bc2000  00000000 00000000 d3304ef3 10f7808e
...
... // good
...
000001c7`47c2eff0  47c2f000 000001c7 00000000 00000000
000001c7`47c2f000  ???????? ???????? ???????? ????????
... // bad
000001c7`47c2fff0  ???????? ???????? ???????? ????????
000001c7`47c30000  00000000 00000000 c5305ef5 0101c17e

如上所示,这些??区域的4k长度正好是字节。

我想知道这个问题的可能原因是什么,这是否意味着硬盘错误或对这些内存的错误操作(其他线程释放了这些区域)?

标签: c++windowsmemoryshared-memory

解决方案


推荐阅读