1

オブジェクトがなんらかの方法で解放されるというエラーが発生しましたが、オブジェクトに対してFreeMemを呼び出すことになります。もちろん、メモリはすでに解放されており、エラーがスローされるため、これによりエラーが発生します。

try-catchブロックでおそらく修正されることはわかっていますが、それは多くのtry-catchブロックです。通常のobject.freeでは、これを回避する方法はFreeAndNil(object)ですが、FreeMemに相当するものが見つかりません。解放する前に割り当てられているかどうかをテストするもの。

読みやすさ、保守性、安定性の点で、ここでの最善の解決策は何ですか。

4

2 に答える 2

7

FreeAndNil に相当するものは次のようになります。

FreeMem(p);
p := nil;

ただし、実際の問題は、解放後に使用するオブジェクトを見つけることで解決できます。FastMM を試してみてください。その作業に役立ちます。

于 2010-07-12T22:06:53.503 に答える
0

とにかく、オブジェクトで FreeMem を呼び出すべきではありません。Free を呼び出して、デストラクタで破棄する必要があります。しかし、他のもの (レコードなど) へのポインターを使用している場合は、Ulrich の言葉に従ってください。(両方の部分です。)

于 2010-07-12T22:26:15.540 に答える