一个关于二维数组的问题 ( 积分: 50 )

  • 主题发起人 主题发起人 anick
  • 开始时间 开始时间
A

anick

Unregistered / Unconfirmed
GUEST, unregistred user!
因为需要,所以定义了一个动态二维数组
type TNewArray = array of array of Byte;

A_Array : TMyArray;

后面
Setlength(A_Array,1000,1000);

现在问题来了,我想获得这个二维数组的长度
Len := Length(A_Array);
这样返回的结果却只有1000个

更大的的还在后面
var MEM : TMemoryStream;

MEM.WriteBuffer(A_Array[0,0],这里该是多少);
已经不知道怎么填写了,填实际长度1000*1000居然报错,1000*1000-1还是报错,请知道的指点一下
 
Setlength(A_Array,10,100);
Len:= Length(A_Array);//10
Len:= Length(A_Array[0]);//100
MEM.WriteBuffer(A_Array[0,0],这里无论多少都报错);
WriteBuffer没用过,换成一唯?
 
冥思苦想了一下问题解决了
获得长度,不过要注意数组是否分配
Length(A_Array)*Length(A_Array[0])

写入流
只能用循环的方式,不过我觉得既然数组在内存中是连续的,为什么写入实际长度反而要出错呢,可以讨论一下,暂时不忙结贴
 
二维动态数组在内存中的位置不是连续的.
数组之数组.每个子数组之间都不是连续的
 
已经不知道怎么填写了,填实际长度1000*1000居然报错,1000*1000-1还是报错,请知道的指点一下
肯定报错, 每个单元最多只能存1000个字节
var
a: array of array of byte
begin
setLeng(a,1000)
for i:=low(a) to high(a) do
begin
setleng(a, 1000);
end;
var FData: array[0..1000-1] of byte;
Move(a[0,1], FData[0], 1000);
pData := @FData[0];
move(a[0,1], FData^, 1000);
 
现在问题来了,我想获得这个二维数组的长度
Len := Length(A_Array);
这样返回的结果却只有1000个

[red]Length(A_Array) 返回类型为 array of byte的数组的长度,而不是Byte类型[/red]
更大的的还在后面
var MEM : TMemoryStream;

MEM.WriteBuffer(A_Array[0,0],这里该是多少);
已经不知道怎么填写了,填实际长度1000*1000居然报错,1000*1000-1还是报错,请知道的指点一下

[red]A_Array[0,0] 指向第一个array of byte 长度为1000[/red]
 
后退
顶部