Arrays 在Pascal中删除三维动态数组时出错
关键是让它与指针一起工作。另外,我用C++找到了。帕斯卡不行,我猜。错过了什么 1) 我为指针创建类型和变量: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,但
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 );