文档中说string的-4偏移存放的是字符串的长度,-8偏移处存放的是字符串的引用计数。
但是我在delphi6中测试发现只有全局的string用“PInteger(Integer(str)-8)^”取出来的才
是引用计数,在一个procedure中定义的局部string变量,用上面的方法取到的始终是-1,
不解了,向各位请教!^_^

解决方案 »

  1.   

    可能是动态的吧。
    procedure TForm1.Button1Click(Sender: TObject);
    var
    S:string;
    P:PInteger;
    I:Integer;
    begin
       S:='abceecit';
       P:=PInteger(Integer(S)-4);
       I:=P^;
       showmessage(inttostr(I));   //显示字符串长度
       P:=PInteger(Integer(S)-8);
       I:=p^;
       showmessage(inttostr(I));
    end;
      

  2.   

    >>一个procedure中定义的局部string变量,用上面的方法取到的始终是-1,
    呵呵,你是这样写的吧:
    var
      s : string
    begin
      s := '12345';//这样的话引用计数就是-1,因为'12345'存储在静态数据区,
    编译的时候地址就定了,属于常量~~~~~~`也就是,不能动态地释放如果这样:s:=inttostr(handle);引用计数就不是-1了~~~````
      

  3.   

    不用贴代码了,就是flyinwuhan(制怒·三思而后行)说的那样,呵呵,为了省事,
    我就用一个常量测试的,嘿嘿,不好意思,基础知识不扎实,惭愧ing~~散分~~