procedure TForm1.Button1Click(Sender: TObject);
var tmp1:string;
    tmp2:^string ;
begin
    new(tmp2);
    tmp1 := '1';
    tmp2 ^:= 'abc';
    CbBox1.Items.AddObject(tmp1,TObject(tmp2^));
end;procedure TForm1.Button2Click(Sender: TObject);
var
  i:integer;
begin
  for i:=0 to CbBox1.Items.Count-1 do
    if CbBox1.Items.Objects[i]<>nil then
    begin
      Dispose(pstring(CbBox1.Items.Objects[i]));
    end;
end;
上述语句中,一执行到Dispose就出错,怎么回事???

解决方案 »

  1.   

    string ?? 不要吧你用record 等
      

  2.   

    for i:=0 to CbBox1.Items.Count-1 do
        FreeAndNil(CbBox1.Items.Objects[i]);
      

  3.   

    楼上,FreeAndNil(CbBox1.Items.Objects[i])出现错误:“Constant object cannot be passed as var parameter”
      

  4.   

    procedure TFormYddwxx.Button1Click(Sender: TObject);
    var i:integer;
        o:Tobject;
    begin
      for i:=0 to CbBox1.Properties.Items.Count-1 do
      begin
        o := CbBox1.Properties.Items.Objects[i];
        FreeAndNil(o);
      end;
    end;
    FreeAndNil(o);还是出现错误
      

  5.   

    for i:=CbBox1.Items.Count-1 to 0 do
    if CbBox1.Items.Objects[i]<>nil then
    begin
    Dispose(Pointer(CbBox1.Items.Objects[i]));
    end;
      

  6.   

    for i:=CbBox1.Items.Count-1 to 0 do
      Dispose(Pointer(CbBox1.Items.Objects[i]));
      

  7.   

    hongqi162(失踪的月亮) ,还是不行,显示“invalid pointer operation”
      

  8.   

    CbBox1.Items.AddObject(tmp1,TObject(tmp2^)); ->
    CbBox1.Items.AddObject(tmp1,TObject(tmp2));
      

  9.   

    这里的问题
    CbBox1.Items.AddObject(tmp1,TObject(tmp2));
      

  10.   

    不要这样用,会造成内存泄漏:
    procedure TForm1.Button1Click(Sender: TObject);
    var tmp1:string;
        tmp2:^string ;
    begin
        new(tmp2);
        tmp1 := '1';
        tmp2 ^:= 'abc';
        CbBox1.Items.AddObject(tmp1,TObject(tmp2^));    //tmp1为生存期自管理,所以没问题;
        //tmp2为指针类型,这时候tmp2失效,而它指向的内存没有释放;
    end;
      

  11.   

    这里的问题
    CbBox1.Items.AddObject(tmp1,TObject(tmp2));
    to hongqi162(失踪的月亮):
    这样添加的话,那如何访问tmp2的值,用如下的语句无法访问(原来用tmp^可以)
    string(CbBox1.Items.Objects[CbBox1.ItemIndex]); 多谢
      

  12.   

    搞定了!!!
    procedure TForm1.Button1Click(Sender: TObject);
    var tmp1:string;
        tmp2:^string ;
    begin
        new(tmp2);
        tmp1 := '1';
        tmp2 ^:= 'abc';
        CbBox1.Items.AddObject(tmp1,TObject(tmp2));
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:=0 to CbBox1.Items.Count-1 do
        if CbBox1.Items.Objects[i]<>nil then
        begin
          Dispose(pstring(CbBox1.Items.Objects[i]));
        end;
    end;访问tmp2的值:(pstring(CbBox1.Items.Objects[CbBox1.ItemIndex]))^
    散分