如果dll里string 传给 exe里.
最后exe里的string在dtor的时候会崩溃.
听说string是采用的引用的方式来传递.
是不是因为dll里的内存不能在exe里释放
所以出现这个问题呢.

解决方案 »

  1.   

    1)首先,对于内存的操作,采用的是谁分配谁删除的原则,也就是说:由DLL产生的内存,应该由DLL来删除,因为只有这样才能保证内存的安全性和不泄漏问题。
    2)对于传递出来的内存内容,最好重新复制一份。这个意思是:如果传递出来一个指针,直接使用的话,当分配者删除时,调用者在使用,那么就会出现问题。这个比较保险的方式是:调用者分配一块同样大小的内存,然后把内容给拷贝出来,不能使用A = B(A、B)同为一个的指针,这是因为这种赋值方式是按照位赋值的,当分配者删除时,同样会出现问题。
      

  2.   

    http://topic.csdn.net/u/20071116/09/cc675daa-0ab2-4952-99d0-98f3dd717439.html
      

  3.   

    最好遵循:哪里分配,哪里释放的原则
    你可以在DLL再暴露一个函数,专门供EXE调用,用于释放DLL中分配的内存区域。
      

  4.   

    DLL 分配的内存肯定要由DLL来释放,除非你的DLL是个COM
    string 在拷贝构造函数或赋值运算时会分配内存,不是引用
      

  5.   

    动态内存遵循哪里分配哪里释放是最高原则。不过根据LZ的描述,即使你遵循了这条原则,也有可能出问题:跨模块或供他人使用的接口中,不宜使用与源代码直接相关的参数!!!如STL、WTL……对象。因为你编译时候的实现与另一模块或他人使用的时候的实现可能不一致(如STL就有N多版本),这个时候对内存的管理很容易出现你的问题:使用的时候可以,释放的时候导致程序崩溃。解决办法:最好把string改为基本的char* or char[]!