Arrays 在Pascal中删除三维动态数组时出错

Arrays 在Pascal中删除三维动态数组时出错,arrays,pointers,memory-management,multidimensional-array,pascal,Arrays,Pointers,Memory Management,Multidimensional Array,Pascal,关键是让它与指针一起工作。另外,我用C++找到了。帕斯卡不行,我猜。错过了什么 1) 我为指针创建类型和变量: type PReal = ^double; PPReal = ^PReal; var data : ^PPReal; 2) 这就是我分配内存的方式(x、y、z是维度): 3) 这就是我如何处理它的: 但是,我得到216(内存访问)或204(无效指针操作)运行时错误。喜欢完整(FreePascal IDE) 非常感谢您的帮助。最后一个dispose将镜像到其getmem,但

关键是让它与指针一起工作。另外,我用C++找到了。帕斯卡不行,我猜。错过了什么

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

type
  PReal = ^double;
  PPReal = ^PReal;
var
  data : ^PPReal;
2) 这就是我分配内存的方式(x、y、z是维度):

3) 这就是我如何处理它的:

但是,我得到216(内存访问)或204(无效指针操作)运行时错误。喜欢完整(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一样。

最后一个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一样。

为什么不使用pascal来实现已知的类型安全性呢。有关如何在pascal中使用动态数组的示例,请参见。pascal是否执行C样式指针+整数加法?为什么不使用pascal以实现已知的类型安全性。有关如何在pascal中使用动态数组的示例,请参见。pascal是否执行C样式指针+整数加法?
  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 );