我是Delphi语言的一个新手,最近在使用Pascal语言上遇到点困惑,请高人指教。
在代码中定义一个函数,返回局部String变量对应的字符串地址:
function RetChar: PChar;
var
str: String;
begin
str := 'Hello, world!';
result := PChar(str);
end;
然后在Button的OnClick事件中调用:
procedure TForm1.Button13Click(Sender: TObject);
var
pStr:PChar;
tmp:String;
begin
pStr := RetChar;
tmp := pStr ;
ShowMessage(tmp);
end;
竟然运行正常,按理说返回局部String变量的字符串指针后,String变量的引用计数变为0,String变量内部字符串所占内存会被回收,为什么这样竟然能运行成功呢?
------解决方案--------------------------------------------------------
因为该地址没有被占用.
------解决方案--------------------------------------------------------
//上面应该改为:
ShowMessage(Format('长度为:%d',[PI^]));
Dec(PI);
ShowMessage(Format('引用计数为:%d',[PI^]));
“类型于”打错,应该是“类似于”