Delphi:未定义的记录变量

ard*_*new 1 delphi null record

我已经定义了一个TCGTable具有以下结构的记录类型:

type
  TCGTable = record
    x : array [1 .. MAX_POINTS] of Single;
    y : array [1 .. MAX_POINTS] of Single;
  end;
Run Code Online (Sandbox Code Playgroud)

我已经声明了一个TCGTable变量CGTable.

如果该记录满足多个运行时条件,则为变量CGTable分配特定的常量TCGTable记录值.

如果没有常数TCGTable记录符合这些条件,则CGTable应该是未定义的.

是否有我可以指定的Delphi 2010内置值CGTable来表明它是未定义的?我一直在使用的值尝试nilnull,但是这两个似乎是只为指针或变异类型有效.源将不会编译分配给这些值CGTable.

我想检查变量CGTable以确定其有效性,而不是,例如,维护一些额外的布尔有效性标志.

我能确定的唯一解决方法是:

a)将类型更改CGTableTCGTable指针(CGTable : ^TCGTable;),然后允许我CGTablenil值进行比较.

b)定义一些常量TCGTable记录作为"无效"记录.然后我将CGTable与这个"无效"记录进行比较.

有关如何处理此问题的任何建议?谢谢

Dav*_*nan 5

您有一个包含静态数组的记录.此特定记录的大小等于ElementCount*SizeOf(Element).

根据您的数组使用MAX_POINTS常量调整大小这一事实,您看起来在数组中有一个可变数量的点.我想我会倾向于切换到这样的动态数组:

type
  TSinglePoint = record
    x: Single;
    y: Single;
  end;
  TSinglePointArray = array of TSinglePoint;
Run Code Online (Sandbox Code Playgroud)

现在,如果你有一个变量,a: TSinglePointArray那么一个值nil表示它是空的或者是零.您可以使用查询数组的长度Length(a).您可以使用调整数组大小SetLength(a, NewLength).