c++ - 由于 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
长度正好是字节。
我想知道这个问题的可能原因是什么,这是否意味着硬盘错误或对这些内存的错误操作(其他线程释放了这些区域)?
解决方案
推荐阅读
- python - datadog:手动设置 traceId
- python - 饼图不会生成 - 破折号/绘图
- java - 如何在现有的 JHipster 应用程序中从 H2 DB 迁移到 Postgresql?
- angular - 如何有效地构建 Angular 和 Spring Boot 应用程序
- c++ - 当 std 数组初始化太小时,C++ 会引发错误吗?
- firebase - 如何修复 Firebase 警告“您正在使用 Firebase 的开发版本”
- c# - 替换文本在从 .chtml 文件中读取的 c# 中不起作用
- python - 基于条件 = True 在将随机值填充到特定列的列中
- git - git log --cherry-pick --right-only --no-merges 会忽略分支之间正确挑选的所有提交吗?
- r - 将 .xlsx 文件保存到磁盘,形成 http post 请求