【发布时间】:2011-10-28 02:13:06
【问题描述】:
我有以下 Delphi 代码:
destructor TXX_XXXX.Destroy;
var
i: Integer;
begin
if Assigned(Allocations) then
begin
for i:=0 to (Allocations.Count - 1) do
begin
try
TXX_ALOC(Allocations.Items[i]).Free;
except on Ex:Exception do
begin
OutputDebugString(PChar('Exception Error Message '+ Ex.Message));
end;
end;
end;
// Above code works well - no exception
try
FreeAndNil(Allocations); {Exception Here}
except on E:Exception do
begin
OutputDebugString(PChar('Exception in xxxxxxxxx.pas'+E.Message));
end;
end;
end;
inherited;
end;
模块“Vcl50.bpl”中地址 4003AB4 的访问冲突。读取地址 2980BFFC
我知道访问冲突通常是由
引起的- 释放一些之前被释放的对象
- 使用一些没有初始化的对象
但在我做免费之前,我检查了分配已分配。如果我放弃异常处理,我的应用程序将抛出一些错误错误。 Allocations 是一个 TObjectList,如果它是一个数组 - 我会怀疑我没有为数组分配长度,但它是一个 TObjectList。
非常感谢!
【问题讨论】:
-
“但在我免费之前,我检查了分配是否已分配”...请注意,这仅在您不仅调用
Free还明确设置对nil的引用时有帮助(或更好地使用FreeAndNil)。Free没有设置对nil的引用,这就是Assigned检查的内容!
标签: delphi free access-violation