type
TSomeRecord = Record
field1: integer;
field2: string;
field3: boolean;
End;
var
SomeRecord: TSomeRecord;
SomeRecAr: array of TSomeRecord;
これは私が持っているものの最も基本的な例であり、再利用したいのでSomeRecord
(特定のフィールドが空のままで、すべてを解放せずに、再利用するときに一部のフィールドが引き継がれますがSomeRecord
、これは明らかに望ましくありません)方法を探しています一度にすべてのフィールドを解放します。から始めてstring[255]
使用しましZeroMemory()
たが、メモリリークが発生するまでは問題ありませんでした。これは、に切り替えたためstring
です。理由を知るにはまだ知識が不足していますが、動的であることに関連しているようです。私も動的配列を使用しているので、ZeroMemory()
動的なものを試すとリークが発生すると思います。それを理解するのに1日が無駄になりました。Finalize()
onSomeRecord
またはSomeRecAr
beforeを使用してこれを解決したと思いますZeroMemory()
、しかし、これが適切なアプローチなのか、それとも私が愚かなのかはわかりません。
問題は、すべてを一度に解放するにはどうすればよいかということです。私が気付いていないこのための単一の手順がまったく存在しますか?
別の言い方をすれば、そもそもこれらのレコードを別の方法で実装する方法を提案することもできます。そのため、ものを解放するために複雑な試みを行う必要はありません。New()
でレコードを作成してから削除する方法を調べましたDispose()
が、呼び出し後の変数Dispose()
が nil ではなく未定義の場合の意味がわかりません。SomeRecord: TSomeRecord
さらに、特定の型の変数 ( ) と型を指す変数( )の違いがわかりませんSomeRecord: ^TSomeRecord
。上記の問題については現在調査中です。誰かがすぐに説明できない限り、時間がかかる可能性があります。