procedure test;
var
  lst: TStrings;
begin
  lst := TStringList.Create;
  Exit;
end;
问题是:Exit执行之后,lst会不会释放,会不会存在内存泄露,请高手回答,不要想当然!

解决方案 »

  1.   


    procedure test;
    var
      lst: TStrings;
    begin
      lst := TStringList.Create;
      Exit;
      lst.free;
    end;或者这样写吧,省的不好理解。
      

  2.   

    不会内存泄露,DELPHI自动回收垃圾
    你那个Exit是多余
      

  3.   

    Delphi(Pascal) codeprocedure test;
    var
      lst: TStrings;
    begin
      lst := TStringList.Create;
      try
        //to do
      finally
        freeAndNil(lst); //创建的对象,最后需要强制释放
      end;
    end;[/Quote]
      

  4.   

    如果你的程序就是就这么点,或者说,你的所有的代码就这么点,exit之后,进程就退出了,那你不用释放了,操作系统会帮你擦屁股。
    否则,你就必须自己释放。
    自动回收是真的可计数资源才会自动回收(所谓的自动回收,也是编译器在你的代码中自动插入了释放的代码而已)同时,你问问题的态度很蛮横,别人回答你的问题好像是应当的,这世界上谁也不欠谁,诚心求教就要有诚心求教的态度!
      

  5.   

    DELPHI应用程序可用的内存区分三类:全局变量区(存放全局变量)、栈(Stack)、堆(Heap)。应用程序开始时所有的全局变量的内存都被分配到全局变量区,局部变量分配到应用程序栈,应用程序结束时分配到栈中的变量内存会被栈管理器自动释放,堆上的变量内存必须手工释放。喷我的那位老兄先查查资料再来,而且我后面也说了最好要手动释放。真不知道说什么
      

  6.   

    嘿嘿,楼上一点幽默感都没有,抱歉抱歉啊。
    也不是所有在堆上的内存都要手动去释放,比如字符串类型,他是在堆上分配内存的,但是delphi会自动管理这块内存,该释放的时候delphi会负责去释放。
      

  7.   


    其实应该抱歉的是我,我只顾着这是一个局部变量,而忽略了另外一个事实:
    Delphi 使用堆为对象、字符串、动态数组及特殊的动态内存请求(GetMem)内存分配。所以应该要手动释放
      

  8.   


    首先lst不会自动释放,程序退出时才会自动释放、delphi不是Java、C#,delphi没有垃圾回收机制