程序源码:
var
 pData:string;
begin
 pData := AllocMem(32);
 pData :- PCHAR('abcd');// pData := 'abcd';//也要出错
 FreeMem(pData);//这里要出错,为什么!
end;

解决方案 »

  1.   

    var
     pData:string;
    begin
     pData := 'abcd';不会出错
     end;
      

  2.   

    var
     pData:PChar;
    begin
     GetMem(pData,32);
     strcopy(pData,PCHAR('abcd'));// pData := 'abcd';
     edit1.text:=pData;
     FreeMem(pData);
    end;
      

  3.   

    在delphi里,string类型是一种自管理类型,不用给他分配、释放内存。
      

  4.   

    没错,String类型是由Delphi管理的,你这样写肯定会出错
      

  5.   

    String的内存是自己管理的,不要强加于人嘛^_^
    如果玩硬的,那二楼的做法真是很不错,很霸道啊。
      

  6.   

    myghost9(myghost9)胡说八道,自己不懂所以然,又误导他人,可恶!!!!
    楼主的代码有问题,既然有分配内存,就按terrace(tyxi)所说,往里面拷贝字符串就行,最后释放内存;否则照linx88(haozi)所说也可以
      

  7.   

    terrace(tyxi)的代码不会出错.pData := 'abcd'显示时都正常,但在FreeMem里出错,使用 strcopy(pData,PCHAR('abcd'));FreeMem不会出错.
    pData := PCHAR('abcd');
    strcopy(pData,PCHAR('abcd'));
    这两句话都会使pData='abcd',但内存分配的机理肯定不一样(如果一样的话在FreeMem就不会出错),谁能解释一下!!!