gpt4 book ai didi

delphi - 如何创建像 SetLength 这样也将内存归零的过程?

转载 作者:行者123 更新时间:2023-12-03 15:17:24 27 4
gpt4 key购买 nike

在某些情况下,我需要设置动态数组的大小,然后用零填充它。

类似于:

procedure SetLengthAndZero(VAR X; NewSize: Integer);
begin
SetLength(x, newsize);
if newsize > 0
then FillChar(x[0], length(x)* SizeOf(x[0]), 0);
end;

但是上面的代码(显然)无法编译。

<小时/>

Delphi 7 ,SetLength之后内存的内容是未定义的。

最佳答案

阅读 Embarcadero 的 documentation :

procedure SetLength(var S: <string or dynamic array>; NewLength: Integer);

For a dynamic array variable, SetLength reallocates the array referenced by S to the given length. Existing elements in the array are preserved and newly allocated space is set to 0 or nil.

这意味着 SetLength 就是您想要的。

<小时/>

如果您想要清除整个动态数组,而不仅仅是分配更多项目并保留现有项目,只需使用 NewLength = 0 调用 SetLength,然后使用想要的长度。

通用解决方案:

Type
TDynArrayTool = record
class procedure ClearAndSetLength<T>( var arr : TArray<T>; newLen : Integer); static;
end;

class procedure TDynArrayTool.ClearAndSetLength<T>(var arr: TArray<T>;
newLen: Integer);
begin
Setlength(arr,0);
SetLength(arr,newLen);
end;

关于delphi - 如何创建像 SetLength 这样也将内存归零的过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39960356/

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