重点是让它与指针一起使用。另外,我发现了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一样。完整code(FreePascal IDE)
任何帮助表示感谢。
答案 0 :(得分:2)
最后一次处置镜像到它的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是新的。