问题描述:
    在一个库的接口上,我以引用的方式传入一个Cist<STRUCT,STRUCT>& listStruct.
    在这个接口中,我会声明一个STRUCT st1。再往listStruct中加入数据。:listStruct.AddTial(st1);
    在调用这个接口的程序中。我需要将这个listStruct删除。 listStruct.RemoveAll();但现在问题是:我在DEBUG下能正确的运行。在RELEASE下,却有时可以,有可不可以。。
我查过几个问题:
    1、以为是链错了库了。但我将LOAD,TRACE出来了。是正确的,没有链错
    2、认为我程序有问题。我在调用程序中直接用AddTial()。直接加数据。再用RemoveAll删除,却不会有错加的方式跟在库中一样。
    3,利用一个一个的删,确定下来是在删最后一个结点是会出问题。而这也只有在库中增加对象才会出现。。直接在程序中增加或是删除,不论是一次性全删(RemoveAll),还是一个一个的删。RemoveAt();都不会出问题分析原因,不明白。。请哪位高手给于详细的解释一下谢谢 

解决方案 »

  1.   

    如果程序没有错,我觉得最大的可能性就是你链接错了,以前我也遇到过类似的问题,比如说你申请内存的时候,链接的是c运行时库的debug版本,但是释放的时候调用的是c运行时库的release版本,就有可能出现这个问题,总而言之,就是申请内存和释放内存的库不是同一个c运行时库,就会出现这个问题,你可以通过despends,看一下release下是否连接的库都是release版本。
      

  2.   

    Release出错,可能和你的某些对象的初始化有关。因为Debug下很多处理是安全的,会帮助你进行一些初始化,而Release下就不会了,因此容易出错。
      

  3.   

    如果你的 STRUCT 里面有 string 的话,那么出错的可能性比较高。DLL 的内存应该归 DLL 管理。exe 的内存归 exe管理。
    你的 DLL 在接口处传了引用的数据,给其它模块修改,那可能会出现问题。 最好传 const 的只读数据。
      

  4.   

    查出真正的原因是:一个是VC的编译是用到的RUN—TIME LIB 不同。一个是多线程静态的,一个是多线程动态的。