• Delphi Setlength 内存释放总结


    https://blog.csdn.net/lotusyangjun/article/details/8203521

    一、在Setlength 被调用次数不多时,可直接使用以下代码进行释放
    var
    aa: array of integer;

    procedure TForm1.Button1Click(Sender: TObject);
    var
    I: Integer;
    begin
    SetLength(aa, 1000);
    for I := 0 to 999 do
    begin
    aa[I] := i;
    end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    SetLength(aa, 0);
    end;
    //这样就OK 了
    二、如果是作为临时变量,赋值给Result作为函数的返回值时,此时除释放bb外,还需释放临时变量aa。
     

    type
    Taa=array of Integer;

    procedure TForm1.Button3Click(Sender: TObject);
    var bb : Taa;
    begin

    bb := getaa;
    SetLength(bb,0); //执行此行,内存无变化
    end;


    function TForm1.getaa:Taa;
    var i : Integer;
    begin
    SetLength(aa,10000000); //如果采用SetLength(Result,10000000); 直接为Result赋值然后返回,则在上面Button3Click可释放内存
    for i := 0 to 10000000 - 1 do
    begin
    aa[i] := i + 1;
    end;
    Result := aa;
    end;



    procedure TForm1.Button2Click(Sender: TObject);
    begin
    SetLength(aa,0); //执行此行,内存占用才减少
    end;

    三、当Setlength在for 或while 循环中使用,被频繁调用很多次时,极易抛出EoutOfMemory异常。此时建议将setlengt拿到循环外部使用,或一次性调用,为动态数组或结构分配足够大的空间。
    ---------------------
    作者:北环阳光
    来源:CSDN
    原文:https://blog.csdn.net/lotusyangjun/article/details/8203521
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    026.MFC_发送消息
    021.MFC_字体和颜色对话框
    020.MFC_文件对话框
    015.MFC_Menu
    qt http get post实现
    openssl error: unrecognized command line option '-m64'
    ModbusTCP协议
    013.MFC_TreeControl
    菱形继承问题以及解决
    ffmpeg
  • 原文地址:https://www.cnblogs.com/tc310/p/10080783.html
Copyright © 2020-2023  润新知