CRT静态堆的原因
从dll导出一个方法来负责释放

解决方案 »

  1.   

    我和楼主有类似的问题,我是用程序的子窗体静态调用DLL,而DLL里操作了子窗体上的控件,子窗体退出是做了变量和Timer 控件的释放,但是再次进入改子窗体时程序无响应,报无效指针 或者非法访问地址错误
      

  2.   

    但是delete之后内存没有减少(我是用windows自带的任务管理器看的)
    内在不会马上释放,楼主试用任务管理器观察下面代码运行时的内存占用:
    cout<<"alloc memory";
    ::Sleep(1000);
    char *p = (char *)new char[4*1024*1024];
    Sleep(1000); // 为了能在任务管理器里看到变化。
    cout<<"free Memory"<<endl;
    delete[] p;
    在delete之后,任务管理器里面的内存占用一点没少。
      

  3.   

    谁申请,谁释放另,你描述中的“exe程序给dll传入指针”应该是传入指针的指针或指针的引用
      

  4.   

    NB, 如果你要实现这种怪异的方法, 你必须查看delete究竟是怎么实现的.
    这对所有人来说都是令人厌恶的.但是,相反的有一个好办法, 你可以传一个消息给dll的窗体对象.
    如果没有窗口,你可以返回一个dll的函数指针给exe, 该dll函数指针能够在函数体内delete.最好是发送一个消息,最保险.