在 Pascal 中删除 3D 动态数组时出错

Error while deleting 3D dynamic array in Pascal

重点是让它与指针一起工作。另外,我发现 similar problem 使用 C++。它不适用于 Pascal,好吧,我猜。错过了什么。

1) 我为我的指针创建了类型和变量:

type
  PReal = ^double;
  PPReal = ^PReal;
var
  data : ^PPReal;

2) 这就是我分配内存的方式(x、y、z 是维度):

GetMem( data, sizeof(PPReal)*x );
for i:=0 to x-1 do begin
  GetMem( (data+i)^, sizeof(PReal)*y );
  for j:=0 to y-1 do begin
    GetMem( ((data+i)^+j)^, sizeof(real)*z );
  end;
end;

3) 这就是我尝试 Dispose() 的方式:

for i:=0 to x-1 do begin
  for j:=0 to y-1 do begin
    Dispose( ((data+i)^+j) );
  end;
  Dispose( (data+i) );
end;
Dispose( data );

但是,我收到 216(内存访问)或 204(无效指针操作)运行时错误。喜欢 this. Full code (FreePascal IDE)

感谢任何帮助。

最后一个 dispose 镜像到它的 getmem,但其他两个不是。解决这个问题,它会起作用:

  for i:=0 to x-1 do begin
    for j:=0 to y-1 do begin
    writeln(i,' ',j,' *');
    Dispose( ((data+i)^+j)^ );
  end;
  writeln(i,' ',j);
  Dispose( (data+i)^ );
end;
Dispose( data );

p.s。 freemem 是 getmem 的逻辑伴侣,因为 dispose 是 new。