语句应是错的!而且有逻辑错误!要一定让TEST建立就用TRY-----FINALY吧!
begin
  if not assigned(test) then
   begin
        show---;
        test:=Tstringlist.create;
      end
       else
       if -----;

解决方案 »

  1.   

    你好,lihaO_ningxia,我只是测试一下,随便写的。
    但是用你的代码我也测试了一下,但是我发现:
    var
      test:tstringlist;
    begin
      if not assigned(test) then showmessage('not exists 1')
    end;
    运行它,也没出现message窗口,还没create test前,
    Assigned(test)的值就已经是True;
      

  2.   

    你用Object是否为nil来判断,但是注意要在释放(Free)的时候把变量赋值为nil.
    例如:
    begin
      if a = nil then
        a := TOBJ.Create;
      a.Free;
      a := nil;
    end;
      

  3.   

    up有道理
    先将
    test := nil 
    然后再用你的语句试试。
      

  4.   

    //请参考
    http://www.csdn.net/Expert/topicview.asp?id=672280
      

  5.   

    在Delphi中,只有全局变量才自动初始化,在你的程序中test: TStringList定义为局部的变量,系统为它随机分配了一个值,所以你用Assigned(test)判断时为True.如果test: TStringList放在全局的地方,那么它会被自动初始化为nil的。
      

  6.   

    你好,shinesi:
    你说只有全局变量才自动初始化,那Assigned(test)判断时为True,
    那么if not Assigned(test) then showmessage('not exists 1')
    不应该显示message窗口,但实际上却有显示。
    请问一下是全局变量自动初始化呢还是局部变量自动初始化???
      

  7.   

    你好:
    我还有一个疑问?
    var
    test:tstringlist;
    begin
    test:=tstringlist.create;
    try
    finlly
    test.free;
    test:=nil;
    //前面两句改变顺序test:=nil;test.free也可以
    //为什么我先把test变量指向nil还能释放test所指向的内存空间???
    end;
    end;
      

  8.   

    我知道了,在test:=nil后,test.free其实没有释放
    之前所创建的tstringlist对象的内存空间的。