我通过CreateFileMapping MapViewOfFile 创建的共享内存 用于2个进程间共享数据。
两个进程退出的时候都需要释放还是只需在一个进程里面释放就可以?
另外我再一个进程退出时候释放共享内存很正常,另外一个进程里面释放就会报下面的错误:
Windows has triggered a breakpoint in *.exe.
2 This may be due to a corruption of the heap, which indicates a bug in *.exe or any of the DLLs it has loaded.
3 This may also be due to the user pressing F12 while *.exe has focus.急求帮忙

解决方案 »

  1.   

    ls443085074 :方便留qq交流 吗,这样论坛效率确认太低了点,我这个问题有点急。恩,谢谢。不过我可以肯定我回收之后不会再访问了,因为我是单线程的,回收之后程序就退出了。
    另外我遇到一个更奇怪的问题。我用vs2005写的一个程序A,程序A里面生成一个对象1,对象1是在共享内存上生成的。我用vs2010写的程序B要去读程序A生成的对象1,结果发现对象1里面的部分数据是对的,部分数据是错的。不知道是我代码本身的问题还是vs2010和vs2005生成的对象内存布局本身不一致导致的?
    我查了很久了,也发现我代码上本身的问题。
      

  2.   

    唉,我之前加了几个vc开发的群,结果发现问了问题几天都没人说话的,好失望,有谁知道活跃点的qq开发群不?
      

  3.   

    代码有点多,不方便贴出来,这个问题郁闷好久了。
    对了有个特点就是我写的程序A是一个dll的插件程序来的,不是独立的程序,不知道与这个有关系没?
      

  4.   

    还有一个特点就是程序A创建的共享内存的首地址和程序B创建的共享内存首地址是不一样的。而我需要在共享内存上动态的生成一些对象,因此我都是记住对象在共享内存中的相对地址,然后再计算出绝对地址的。
    比方说程序A生成了一个对象1,我会保存它的相对地址,然后程序B可以通过这个相对地址再加上共享内存在程序b中的头地址计算出它的绝对地址。在强制转换成对象1.这样程序B就可以访问它了。
    这样方式下我测试了有些对象能正常访问,有些又不可以。
      

  5.   

    比方说程序A生成了一个对象1,我会保存它的相对地址,然后程序B可以通过这个相对地址再加上共享内存在程序b中的头地址计算出它的绝对地址。在强制转换成对象1.这样程序B就可以访问它了。
    这方法明显是错误的。原因就是相对地址都是虚拟映射的。每次开个EXE就会根据自身情况重新编排。
    你有些对象能正常访问,这个只是巧合中的巧合。