关于SetLength报Out of memory的研究及解决办法
关于SetLength报Out of memory的研究及解决办法
最近在做一个GIS系统, 在读GIS数据时采用了动态数组,突然读一个数据时SetLength报错!Out of memory
仔细研究了代码, 发现代码没有问题。问题应该动态数组的问题。
接下来查看各种资料,发现也有一些人发现了类似的问题,一般认为是频繁SetLength造成的,
具体为什么为造成错误呢?
我们来做一个测试
procedure TForm1.Button1Click(Sender: TObject);
var
I,J : Integer;
begin
for I := 1 to 10 do begin
SetLength(giDatas,I*10);
giDatas[I*10-1] := I;
//
Memo1.Lines.Add(Format('I=%.2d, Addr = %d',[I,Integer(@giDatas[0])]));
end;
end;
这个一段非常简单的代码,一般会认为@giDatas[0]会是定值(至少我以前是这样认为的)
I=01, Addr = 27139384
I=02, Addr = 26525640
I=03, Addr = 26525640
I=04, Addr = 26395448
I=05, Addr = 26395448
I=06, Addr = 26395448
I=07, Addr = 26395448
I=08, Addr = 26694280
I=09, Addr = 26694280
I=10, Addr = 26694280
根据得出的结果来看,@giDatas[0]在不断改变, 也就是giDatas在不断开辟新的内存
原来占用的内存没有及时释放,所以多次SetLength后会报Out of memory.
问题找出来了, 解决办法还是问题。 仍然查找了许多资料, 发现用指针来解决
比如类似的程序
type
duilie=record
item_name:integer;
level:integer;
count:integer;
father:integer;
children:array of integer;
end;
var
leaf:array of duilie;
其中leaf的定义采用
type
Pduilie = ^duilie;
var
leaf:array of pduilie;
应该就可以了
http://blog.csdn.net/fenglinyushu/article/details/8495595
关于SetLength报Out of memory的研究及解决办法的更多相关文章
- Oracle 12c报错:ORA-01078和LRM-00109的解决办法
Oracle 12c报错:ORA-01078和LRM-00109的解决办法 2017-12-17 10:25:30 lemon_love1 阅读数 4336 收藏 更多 分类专栏: oracle ...
- Python print报ascii编码异常的靠谱解决办法
之前遇到此异常UnicodeEncodeError: 'ascii' codec can't encode characters...,都是用这种方式解决:sys.setdefaultencoding ...
- 在执行Java命令或eclipse启动程序,提示报错’jvm.cfg无法找到’的解决办法
一.问题背景 昨天debug代码的时候,突然发现无法启动程序了.每次启动程序的时候均报如下错误:(回家以后重现了下这个问题.发现不同电脑,所在的lib下的文件夹不一样,应该和jdk安装时硬件的情况有关 ...
- Win7系统安装好Axure点击运行报.NET Framework4.0未安装的解决办法
1:问题 由于工作需要,需要研究一下Axure原型设计软件的使用方式,在公司的电脑上成功安装了从同事那里拿来的Axure7.0软件,能够正确运行没有任何问题,在自己的电脑上安装的也非常顺利,不过运 ...
- Jenkins中使用Azure Powershell连接Service Fabric报错not recognized的原因与解决办法
一.使用背景 在涉及Azure service Fabric的自动化应用场景中,依赖于Service Fabric的Azure Powershell cmdlets,我们可以使用Jenkins能实现c ...
- python selenium 报错unknown error: cannot focus element 解决办法
登录框由于js限制,定位到元素后无法sendkey ,sendky报错如下: selenium.common.exceptions.WebDriverException: Message: unkno ...
- Navicat Premium 连接Oracle登入时候报ORA-12638: 身份证明检索失败的解决办法
我的电脑是64位,oracle也是64位, plsql客户端是32位,oci连接的是32位 11.2版本: 用plsql 连接本地或远程数据库都没问题.在用 Navicat Premium 连本也没问 ...
- 微信 AES 解密报错 Illegal key size 三种解决办法
微信 AES 解密报错 Illegal key size Java 环境 java version "1.8.0_151" Java(TM) SE Runtime Environm ...
- war包部署在tomcat下,使用windows service服务方式启动tomcat服务器,在包含调用dll的模块,报dll找不到问题的解决办法
问题描述: 开发了一个需要调用dll的java web程序,在idea开发环境下运行调试没问题,可以正常运行,在tomcat/bin下,运行批处理startup.bat,启动tomcat服务器,也可以 ...
随机推荐
- [tmux] Share a tmux session for pair programming with ssh
By using ssh, you can share a tmux session, making pair programming much easier. We'll learn how to ...
- 真机测试时出现 could not find developer disk image问题
解决Xcode在ipad/iphone 系统真机测试时出现could not find developer disk image问题 原因:手机系统版本比xcode版本高,sdk不支持 方法:更新Xc ...
- iOS9.0 生成证书流程一(非推送)
1.首先进入网址 http://developer.apple.com 2.第二登入,点击
- 【t017】YL杯超级篮球赛
Time Limit: 1 second Memory Limit: 256 MB [问题描述] 一年一度的高一YL杯超级篮球赛开赛了.当然,所谓超级的意思是参赛人数可能多于5人.小三对这场篮球赛非常 ...
- hadoop 3.x 完全分布式集群搭建/异常处理/测试
共计三台虚拟机分别为hadoop002(master,存放namenode),hadoop003(workers,datanode以及resourcemanage),hadoop004(workers ...
- 在这里23种经典设计模式UML类图汇总
创建型模式 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说"来四个鸡翅"就 ...
- vuex与vue-router学习方案
1.vuex,官方vuex2.0的文档写得太简略了,先1.0的文档,研究1.0分支的counter例子.1.0文档只需看核心概念和API参考文档.2.0的用法先不管,需要的时候再说,先把1.0高熟练. ...
- Multiple address space mapping technique for shared memory wherein a processor operates a fault handling routine upon a translator miss
Virtual addresses from multiple address spaces are translated to real addresses in main memory by ge ...
- PAT 1021-1030 题解
早期部分代码用 Java 实现.由于 PAT 虽然支持各种语言,但只有 C/C++标程来限定时间,许多题目用 Java 读入数据就已经超时,后来转投 C/C++.浏览全部代码:请戳 本文谨代表个人思路 ...
- C/C++ 常量的定义与应用(编程中的常量)
常量一般定义为全局变量,且大写: 1. 字符串常量 const string EXPAND_X = "X+YF"; const string EXPAND_Y = "FX ...