Delphi如何动态开辟一个地址连续的二维数组
时间:2011-11-04
来源:互联网
实际环境中是要调用一个DLL函数,其中的一个参数是二维数组。我原先的代码如下:
Delphi(Pascal) code
我的分析是SetLength()分配的内存是不连续。不知有更方便的办法没。
谢谢。
Delphi(Pascal) code
var a: array of array of Char; begin SetLength(a, 50, 128); //发现这样会有问题。而直接使用a: array [0..49, 0..127] of Char;或使用GetMemory()方法不会有问题。 end;
我的分析是SetLength()分配的内存是不连续。不知有更方便的办法没。
谢谢。
作者: zhangnt 发布时间: 2011-11-04
动态数组是在堆中分配空间的,这就无法保证数组的空间一定是连续的,而且一般都是不连续的,只有在栈中分配的数组即静态数组的空间一定是连续的。动态数组的空间没有必要是连续的,通过下标访问就行了,下标就是实际地址,不知你说有问题是什么问题。
作者: bluekitty 发布时间: 2011-11-04
并不是在堆中分配内存地址就不连续。当然是连续的,GetMem函数分配的内存地址都是连续的,不连续不乱套了。
只是lz的数组有点特别,他是一个多维的动态数组,setlength是delphi优化的,他针对这种数组类型可能并不保证内存连续,因为数组是通过下标访问的而不是指针。
只是lz的数组有点特别,他是一个多维的动态数组,setlength是delphi优化的,他针对这种数组类型可能并不保证内存连续,因为数组是通过下标访问的而不是指针。
作者: truexf 发布时间: 2011-11-04
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28