可以编译,但运行出错。
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    cb: TComboBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    function ss:Tstrings;
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}function TForm1.ss:Tstrings;
var
  sd:Tstrings;
begin
  sd := Tstringlist.Create;
  try
    sd.Add('aa');
    sd.Add('bb');
    ss := sd;
  finally
    sd.Free;
  end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
    cb.Items.Assign(ss);
end;end.

解决方案 »

  1.   

    问题解决了,不要放sd.Free;
    但在哪里释入资源呢?
      

  2.   

    你使用ss := sd;赋值实际是指针的传递,sd.Free;后ss指针即为nil,所以你最好使用ss.Assign(sd);
      

  3.   

    function ss:Tstrings;
    var
      sd:Tstrings;
    begin
      sd := Tstringlist.Create;
      try
        sd.Add('aa');
        sd.Add('bb');
        ss := TStringList.Create;
        ss.Assign(sd);
      finally
        sd.Free;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var ss1: TStrings;
    begin
      ss1 := ss;
      cb.Items.Assign(ss1);
      ss1.Free;
    end;
      

  4.   

    我是一个单元文件没有那事件。
    assign是一个样高手还有没有办法
      

  5.   


      public
        function ss(Sd:TStrings):Tstrings;
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}function TForm1.ss(Sd:TStrings):Tstrings;
    begin
      sd.Add('aa');
      sd.Add('bb');
      Result := sd;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var Sd:TStrings;
    begin
      Sd := TStringList.Create;
      Try
        cb.Items := ss(Sd);
      Except 
        Sd.Free;
      End;
    end;
      

  6.   

    老大,不能这样定义
    var
      sd:Tstrings;
    应该是
    var
      sd:TstringList;
    然后sd.free就没有错误了!!!
      

  7.   

    问题出现在这里:
    function ss:Tstrings;
    var
      sd:Tstrings;
    begin
      result;=Tstrings.create;//增加一句
      sd := Tstringlist.Create;
      try
        sd.Add('aa');
        sd.Add('bb');
        ss := TStringList.Create;
        result.Assign(sd);
      finally
        sd.Free;
      end;
    end;
      

  8.   

    不好意思,贴错了,重来,这个方法和 sysu(死树) 的方法一样,应该没问题,我是过了
    问题出现在这里:
    function ss:Tstrings;
    var
      sd:Tstrings;
    begin
      result;=Tstrings.create;//增加一句
      sd := Tstringlist.Create;
      try
        sd.Add('aa');
        sd.Add('bb');
        result.Assign(sd);
      finally
        sd.Free;
      end;
    end;