在 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。
重点是让它与指针一起工作。另外,我发现 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。