1

我有这种类型:

type
  pTRegex_sec=^TRegex_sec;
  TRegex_sec = record
  secs: Array of pTRegex_sec;
  len: byte;
  hasSections: boolean;
  hasUnits: boolean;
  units: Array of TRegex_unit;
end;

type TRegex_assertions = record
  len: byte;
  secs: Array of TRegex_sec;
end;

我想为 TRegex_sec 类型分配内存:

var Assertions: TRegex_assertions;
begin
  setlength(Assertions.secs, 1);
  GetMem(Assertions.secs[0], SizeOf(TRegex_sec));
end;

我遇到的错误是“不兼容的类型”:Assertions.secs[0]<-- here

另一个尝试,同样的错误:

New(Assertions.secs[0]);

如何正确执行?

4

1 回答 1

2

TRegex_assertions.secs字段是一个动态记录数组,而不是一个指针数组。无需使用GetMem()分配该数组,SetLength()已经为您处理了。

但是,该TRegex_sec.secs字段是一个动态的指针数组。用于SetLength()根据需要分配该数组,然后用于New()分配单个TRegex_sec实例以填充它:

var
  Assertions: TRegex_assertions;
begin
  SetLength(Assertions.secs, 1);
  SetLength(Assertions.secs[0].secs, 1);
  New(Assertions.secs[0].secs[0]);
  ... 
end;
于 2019-06-11T17:08:16.983 回答