を解放するとき、私は、次のDelphiコードがあります:モジュールのアドレス4003AB4でアクセス違反TObjectListを
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' を。アドレス2980BFFC
の読み取り、私は通常
- 無料
- は初期化せずに
をいくつかのオブジェクトを使用する。しかし、ここで私の前に前に解放されているいくつかのオブジェクトによって引き起こされる、アクセス違反を知っています私は割り当てが割り当てられていることを確認しました。私が例外処理を破棄すれば、私のアプリケーションは何か間違ったエラーをスローします。 配列は配列の場合はTObjectListです。配列に長さを割り当てなかったのは疑いがありますが、TObjectListです。
ありがとうございます!
"しかし、ここで私が自由にする前に、割り当てが割り当てられていることを確認しました。"これは単に「フリー」を呼び出すだけでなく、明示的に 'nil'を参照してください(あるいは' FreeAndNil'を使うのが良いでしょう)。 'Free'は' nil'への参照を設定しません。それが 'Assigned'チェックです! – jpfollenius