写dll的时候使用malloc分配了内存  free的时候会出错 好像是内存分配在调用dll的模块里 free的时候在dll的模块里
那么该怎么办呢???

解决方案 »

  1.   

    malloc和free要么同在DLL内,要么同在DLL外,否则可能不兼容/MD  MSVCRT.LIB // C/C++ Runtime动态库 MSVCRT40.DLL 
    /MDd  MSVCRTD.LIB  // MSVCRT.LIB的调试库
    /ML LIBC.LIB // C Runtime静态库 单线程版
    /MLd LIBCD.LIB  // MLIBC.LIB的调试库 
    /MT LIBCMT.LIB // C Runtime静态库 多线程版 
    /MTd LIBCMTD. // LIB LIBCMT.LIB的调试库
    同一版本的Release库和Debug库的free()函数可能是兼容的
    不同版本的C/C++库的free()函数基本就是两码事,内部实现有很大的不同。如果你用动态版的free去释放静态版的malloc出错是很正常的。极端子例子是一有方根本就没有使用C/C++ Runtime库,你在外部调用free,DLL里面根本就不认识free
      

  2.   

    更正一下,两方同时是静态版本C Runtime静态库也会报错,
    虽然free函数是相同的,但静态版内free函数内部用到的临时变量是固定的,两个静态函数版本就会有两套临时变量,所以也会报错。