Windows 10上的共享内存中的不可访问内存导致崩溃

时间:2019-07-19 08:57:06

标签: c++ windows memory shared-memory

我使用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转储了内存,并在共享内存中得到了一些??,这意味着根据?? in memory locations的未映射地址。

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个字节。

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

0 个答案:

没有答案