• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

DelphiSetlength内存释放总结

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

SetLength

  功能说明:设置字符串或动态数组长度。该函数有两个参数。第一个参数为要设置的字符串变量或动态数组变量,第二个参数为指定的长度
  参考实例:
  var
    S: String;
    arrText: array of Char; // 定义一个动态数组
  begin
    SetLength(S, 10); // 当设置后,S变量只能赋值长度为10的字符串。
    SetLength(arrText, 10); // 只有使用SetLength为动态数组分配内存空间后才能使用动态数组。这句代码的作用相当于arrText: array[0..9] of Char
  end;

 

 

一、在Setlength 被调用次数不多时,可直接使用以下代码进行释放

[delphi] view plain copy
 
  1. var  
  2.   aa: array of integer;  
  3.   
  4. procedure TForm1.Button1Click(Sender: TObject);  
  5. var  
  6.   I: Integer;  
  7. begin  
  8.   SetLength(aa, 1000);  
  9.   for I := to 999 do  
  10.   begin  
  11.     aa[I] := i;  
  12.    end;  
  13. end;  
  14.   
  15. procedure TForm1.Button2Click(Sender: TObject);  
  16. begin  
  17.   SetLength(aa, 0);  
  18. end;  
  19. //这样就OK 了  

二、如果是作为临时变量,赋值给Result作为函数的返回值时,此时除释放bb外,还需释放临时变量aa。

 

[delphi] view plain copy
 
  1.   type  
  2.       Taa=array of Integer;  
  3.   
  4. procedure TForm1.Button3Click(Sender: TObject);  
  5. var bb : Taa;  
  6. begin  
  7.   
  8.     bb := getaa;  
  9.     SetLength(bb,0);   //执行此行,内存无变化  
  10. end;  
  11.   
  12.   
  13. function TForm1.getaa:Taa;  
  14. var i : Integer;  
  15. begin  
  16.     SetLength(aa,10000000);   //如果采用SetLength(Result,10000000); 直接为Result赋值然后返回,则在上面Button3Click可释放内存  
  17.      for i := to 10000000 - do  
  18.      begin  
  19.         aa[i] := i + 1;  
  20.      end;  
  21.      Result := aa;  
  22. end;  
  23.   
  24.   
  25.   
  26. procedure TForm1.Button2Click(Sender: TObject);  
  27. begin  
  28.     SetLength(aa,0);  //执行此行,内存占用才减少  
  29. end;  

三、当Setlength在for 或while 循环中使用,被频繁调用很多次时,极易抛出EoutOfMemory异常。此时建议将setlengt拿到循环外部使用,或一次性调用,为动态数组或结构分配足够大的空间。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
win 10 下matlab 7 运行不了,弹出警告,完美解决方案发布时间:2022-07-18
下一篇:
[Matlab]三维曲面绘制实例发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap