我有一段 Delphi 代码
var
a: array of array of array of integer;
begin
try
SetLength(a, 100000, 100000, 10000); // out of memory here
doStuffs(a);
except
a = nil; // try to free the memory
end;
end;
上面的代码尝试分配大量内存,会捕获到
out-of-memory
异常。虽然a=nil
将被执行,但内存并没有被释放。在内存不足异常发生的情况下,是否有一种方法可以释放内存呢?
我尝试了
SetLength(a, 0, 0, 0)
和Finalize(a)
,但两者都无效。
a
是否具有非空值?如果没有,那么你几乎不能指望能够释放它。此外,它将在函数结束时被释放。你确认了SetLength
在无法完成分配所有请求的内存时是否设置了a
变量吗? - Rob Kennedya
在异常处理程序中是nil
。 - David Heffernan