首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-02-20 
Delphi如何动态开辟一个地址连续的二维数组实际环境中是要调用一个DLL函数,其中的一个参数是二维数组。我原

Delphi如何动态开辟一个地址连续的二维数组
实际环境中是要调用一个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()分配的内存是不连续。不知有更方便的办法没。

谢谢。

[解决办法]
动态数组是在堆中分配空间的,这就无法保证数组的空间一定是连续的,而且一般都是不连续的,只有在栈中分配的数组即静态数组的空间一定是连续的。动态数组的空间没有必要是连续的,通过下标访问就行了,下标就是实际地址,不知你说有问题是什么问题。
[解决办法]
并不是在堆中分配内存地址就不连续。当然是连续的,GetMem函数分配的内存地址都是连续的,不连续不乱套了。
只是lz的数组有点特别,他是一个多维的动态数组,setlength是delphi优化的,他针对这种数组类型可能并不保证内存连续,因为数组是通过下标访问的而不是指针。

热点排行