程序源码:
var
pData:string;
begin
pData := AllocMem(32);
pData :- PCHAR('abcd');// pData := 'abcd';//也要出错
FreeMem(pData);//这里要出错,为什么!
end;
var
pData:string;
begin
pData := AllocMem(32);
pData :- PCHAR('abcd');// pData := 'abcd';//也要出错
FreeMem(pData);//这里要出错,为什么!
end;
pData:string;
begin
pData := 'abcd';不会出错
end;
pData:PChar;
begin
GetMem(pData,32);
strcopy(pData,PCHAR('abcd'));// pData := 'abcd';
edit1.text:=pData;
FreeMem(pData);
end;
如果玩硬的,那二楼的做法真是很不错,很霸道啊。
楼主的代码有问题,既然有分配内存,就按terrace(tyxi)所说,往里面拷贝字符串就行,最后释放内存;否则照linx88(haozi)所说也可以
pData := PCHAR('abcd');
strcopy(pData,PCHAR('abcd'));
这两句话都会使pData='abcd',但内存分配的机理肯定不一样(如果一样的话在FreeMem就不会出错),谁能解释一下!!!