我有一个结构体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字节。两个结构体都是由客户定义的,且已经做了对齐的考虑。请问各位大侠,出现上述问题的原因是什么呢?该如何解决呢?

解决方案 »

  1.   


    读取应该是没有问题的。因为,我有很多类似的数据结构需要进行这两个操作。我把调用CreateFileMap和MapViewOfFile的过程单独放在一个函数中了。其他的数据结构在使用这个函数时没有任何问题,只有上面提到的A数据结构有问题。
      

  2.   

    直接算的sizeof A结构体,也就是4600多字节。
      

  3.   

    有可能是
    1.指针问题
    2.map大小问题
      

  4.   

    这个,如果直接把void*转为A*的话,可能没有调用构造函数,成员变量可能没有初始化。