gpt4 book ai didi

arrays - 如何使用Delphi填充结构/记录数组?

转载 作者:行者123 更新时间:2023-12-03 19:02:47 30 4
gpt4 key购买 nike

我想填充一组记录,并且由于最近接触过TMappedFile,所以我试图对其进行复制,而实际上没有使用unFileMapping或BlockRead / Write。目的是为此保留我的选择。我发现的问题是它没有正确启动或正确创建阵列。

从我到目前为止所看到的是,DataArr在编译后仍为nil。并导致内存冲突错误(0x00000000),这意味着它为空/空。我的工程师已经对我说过,阵列的大小可能出于目的而变大,并且还提到除非我遵循指针,否则我将无法做我想做的事情。 DataArr^[0].value1

我相信我对SetLength的困惑在于,对于动态数组来说,SetLength似乎很不直观,这就是为什么我将其注释掉了。否则会出现错误E2008 incompatible types

type
TDataStruct = Record
value1 : array[0..1] of Single;
value2 : array[0..1] of Single;
value3 : array[0..1] of Single;
end;

TDataStructArray = array[0..MaxInt div SizeOf(TDataStruct) - 1] of TDataStruct;
PDataStructArray = ^TDataStructArray;

var
DataArr: PDataStructArray;

begin
//SetLength(DataArr,length(DataArr)+1);
DataArr[0].value1[0] := 2;


我尝试过的其他方法是使用 FillChar(DataArr,SizeOf(DataArr),0)以及 FillChar(DataArr[0], SizeOf(DataArr[0]) * Length(DataArr));

以下链接是我的来源


How to delete an Index of the Dynamic Array of Records
Using New/Dispose with record pointer containing WideString
Assigning a pointer of a record to an array of char in Delphi - come again?
How do i declare an array when i don't know the length until run time

最佳答案

dynamic array表示:动态。


动态数组没有固定的大小或长度。相反,当您为数组分配值或将其传递给SetLength过程时,将为动态数组重新分配内存。


宣布

DataArr: Array of TDataStruct;


使用 SetLength分配记录并同时对其进行初始化。

SetLength(DataArr,Length(DataArr)+1); // Or preallocate as many as you wish to initialize


访问数组中的一条记录:

DataArr[0].value1[0] := 2;




在您的示例中,没有进行内存分配,因此会出现错误。并且 SetLength在动态数组上运行,而不是在指向静态数组的指针上运行。

您可以使用GetMem / FreeMem管理指针,并使用ZeroMem进行初始化,但这只会造成构建和维护代码的麻烦。

关于arrays - 如何使用Delphi填充结构/记录数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40027975/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com