谁来帮我看看啊 我拿DLL导出C++类时,dll中只要一用CString,在用BoundsChecker检查内存时 就有好多内存泄露的地方 实在是不明白啊。
高手给解释一下啊。我的exe和dll传递参数也使用LPCTSTR传递的,exe中我也把分配的指针释放了。谁要源代码,我给谁发过去 大家帮着分析一下,在dll中也有delete this这个方法  在exe中也调用了。实在不明白啊。高手分析一下吧。dll静态链接的

解决方案 »

  1.   

    CString里的内存分配也是用NEW来完成的,如果在一个库里分配了内存,再到别一个库里去释放,肯定会出问题的。建议使用LPTSTR,LPCTSTR去传递。
      

  2.   

    DLL中如果分配内存如释放内存用的不是同一个运行期库,程序就会有问题
    DLL可以提供两个接口,一个分配,一个释放,
    还有就是DLL中最好不要用CString,换成char*或者LPTSTR代替
      

  3.   

    我的程序大致这样class Base
    {
    public:
         CVirtualFun(){};
         virtual ~CVirtualFun(){};
         virtual void setLocDirpath(LPCTSTR locpath)=0;
         virtual void setServerPath(LPCTSTR serverpath)=0;
         virtual void Release()=0;
    };
    CString szLocalPath;class drriver:public Base
    {
    public:
          void setLocDirpath(LPCTSTR locpath);
          void setServerPath(LPCTSTR serverpath);
          void Release();
          friend LPVOID _stdcall CreatDownloadObject();//保证只有CreatDownloadObject才能实例化CDownLoad
    private:
    CDownLoad(){};
    CDownLoad(const CDownLoad &);
    CDownLoad& operator=(const CDownLoad &);
    };
    LPVOID _stdcall CreatDownloadObject()//导出函数
    {
    return new CDownLoad;
    }
    void CDownLoad::Release()
    {
    delete this;
    }
    void CDownLoad::setLocDirpath(LPCTSTR locpath)
    {
    szLocalPath=_T(locpath);
    MessageBox(NULL,szLocalPath,"",MB_OK);
    }void CDownLoad::setServerPath(LPCTSTR serverpath)
    {
           //dosomething
    }只要定义了CString(不管用不用),boundschecker就能检测到内存泄露,死活不知为啥了。在afxtls.cpp
    ,tidtable.cpp,onexit.c,_file.c等等文件中。
          
      

  4.   

    我只是在我的dll中用了CString 传递参数也是用的 LPCTSTR 应该没有问题啊。老大们,帮帮忙吧。我就想知道为什么???????
      

  5.   

    可能boundscheck对MFC CString支持有问题》
      

  6.   

    你好! 请问为什么在dll中最好不要用MFC类库?!