我用mystrings.AddObject('1',TObject(pchar('hello')));,然后再
ShowMessage(String(pchar(mystrings.Objects[0])));时出错,如何正确AddObject一个string?

解决方案 »

  1.   

    奇怪了,用TStrings.Add,Insert...不可以啊?
      

  2.   

    你要确保你再次调用mystrings.Objects[0]的时候,原来'hello'分配的内存没有被释放,否则肯定会出错的。mystrings.Objects[0]记录的只是一个指针。
      

  3.   

    var
      pstr :PString;
    begin
      New(pstr);
      pstr^ := 'Hello';
      MyStrings.AddObjects('1', TObject(pstr));
      ShowMessage(PString(MyStrings.Objects[0])^);
      Dispose(pstr);
    end;
      

  4.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      Strings: TStrings;
    begin
      Strings := TStringList.Create;
      Strings.AddObject('1',TObject(pchar('hello')));
      ShowMessage(String(pchar(Strings.Objects[0])));
      Strings.Free;
    end;我按照你的方法试了,没能问题,应该是Strings的创建出了问题,要用TStringList创建
      

  5.   

    上面 Linux2001(恋人不如自恋) ( )和lovestl(天上明月光,地上心慌慌) ( ) 的写法在同一过程中的局部调用没有问题,但在其他地方调用肯定会出错的。还是我上面说的,要确保调用mystrings.Objects[0]的时候,原来'hello'分配的内存没有被释放。两个方法,一,是把字符串定义成全局变量;二,定义为PChar型,用getmem或allocmem在堆里分配内存,用完自己释放。
      

  6.   

    呵呵, 直接使用Delphi的String类型直接赋值呢 ,我都是这么使用的. 不存在地址被释放的问题. 系统自动维护应用计数