我自定义了一个DLL,在DLL函数为
procedure getNewchar(instr:pchar;var outstr:pchar);
begin
 getmem(outstr,32);
 copymemory(outstr,instr,32);
//这里没有释放
end;在另外一个程序调用DLL如下:
procedure test();
var
 a:pchar;
begin
 getNewchar('123456',a);
 edit1.text:=a;
 freemem(a);//???此处出错
end;
为什么我在DLL内部分配的内存在外部释放会出错???
 

解决方案 »

  1.   

    内存管理器不同
    你最好把DLL和EXE看做两个不同的对象
    谁分配谁释放,在DLL里分配的,就得在DLL中释放,而不要让EXE代劳
      

  2.   

    调用完DLL,DLL会自动释放DLL中申请得内存吗
      

  3.   

    不会
    加上ShareMem来释放内存就不会有问题了
      

  4.   

    DLL申请的,就让DLL释放. 别外SHAREMEM加上.
      

  5.   

    dll 的导出函数,尽量使用 PChar,并且做到谁分配谁释放。