在dll中malloc后,在调用它的程序中free内存可以么?

解决方案 »

  1.   

    可以,因为DLL试运行在调用它的程序中进程空间中的。
      

  2.   

    这个问题我倒没想过。不过我认为可以,因为调用free只要给他搁指针就可以了。
    但是,应该注意顺序。如果你在卸载dll之后用free的话,就可能出错了。这只是个人观点,猜测猜测
      

  3.   

    不行。因为windows系统在应用程序.dll的内存管理是分开的。也就是说dll自己分配的内存必需自己释放。在app自己的内存分配列表中没有dll中分配的内存信息,所以你如果用app来释放会raise error
      

  4.   

    对,是不行,因为malloc是在程序自己的堆栈中分配。你使用GlobalAlloc分配全局堆中分配,然后再程序中使用GlobalFree就可以了,但是不同的进程也是不可以的。
      

  5.   

    同意Frank Zhou的看法,msdn上有说明,因为dll和app的堆不一样,你需要在全局堆中分配。GlobalAlloc
      

  6.   

    正确的做法是:你应该在dll中再输出一个函数,客户端掉用它来释放内存,这样客户端就不必关心dll中的内存是如何申请的了.