+ -
当前位置:首页 → 问答吧 → Delphi如何动态开辟一个地址连续的二维数组

Delphi如何动态开辟一个地址连续的二维数组

时间:2011-11-04

来源:互联网

实际环境中是要调用一个DLL函数,其中的一个参数是二维数组。我原先的代码如下:
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优化的,他针对这种数组类型可能并不保证内存连续,因为数组是通过下标访问的而不是指针。

作者: truexf   发布时间: 2011-11-04

热门下载

更多