调用CreateFileMap和MapViewOfFile成功,映射到的数据却无意义

bai_hua_lin 2011-07-23 09:55:10
我有一个结构体A,它里面还内含一个结构体B。A中存放着一个B类型的数组。
现在,我先调用了CreateFileMap,传递的文件句柄参数是那个无效文件句柄INVALID_HANDLE_VALUE,调用这个函数返回的确实是一个有效的文件映射句柄。然后用MapViewOfFile,也成功了。
但是,我通过把MapViewOfFile返回的void*指针转换为A*,发现了一个问题。A对象中存放的B类型数组并不全部是有意义的,比如这个数组大小为17,但我发现数组下标从15开始就已经没有意义了。最奇怪的是,虽然下标从15开始出现问题,但在下标为15的这个地方取到的B类型对象中,还是有部分成员变量有意义。

A,B两个结构体都很大,我求过它们的sizeof,发现A的已经达到4K多byte了,B的大小为272字节。两个结构体都是由客户定义的,且已经做了对齐的考虑。

请问各位大侠,出现上述问题的原因是什么呢?该如何解决呢?
...全文
257 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzaen 2011-07-25
  • 打赏
  • 举报
回复
这个,如果直接把void*转为A*的话,可能没有调用构造函数,成员变量可能没有初始化。
hzy694358 2011-07-25
  • 打赏
  • 举报
回复
代码贴出来看看喽……
不说害怕 2011-07-25
  • 打赏
  • 举报
回复
多线程同步问题?数据对齐问题?
bai_hua_lin 2011-07-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 c_losed 的回复:]
有可能是
1.指针问题
2.map大小问题
[/Quote]
指针问题?map大小问题?
c_losed 2011-07-24
  • 打赏
  • 举报
回复
有可能是
1.指针问题
2.map大小问题
bai_hua_lin 2011-07-24
  • 打赏
  • 举报
回复
自己顶一下,莫沉了。
bai_hua_lin 2011-07-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oyljerry 的回复:]
既然大部分数据对,那就估计还是数据处理有问题或者你读取的时候有问题.
[/Quote]

读取应该是没有问题的。因为,我有很多类似的数据结构需要进行这两个操作。我把调用CreateFileMap和MapViewOfFile的过程单独放在一个函数中了。其他的数据结构在使用这个函数时没有任何问题,只有上面提到的A数据结构有问题。
oyljerry 2011-07-23
  • 打赏
  • 举报
回复
既然大部分数据对,那就估计还是数据处理有问题或者你读取的时候有问题.
bai_hua_lin 2011-07-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 htron 的回复:]

你的MAP是多大?
[/Quote]
直接算的sizeof A结构体,也就是4600多字节。
htron 2011-07-23
  • 打赏
  • 举报
回复
你的MAP是多大?

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧