動的配列の扱いについて


けこけこ  2002-02-23 08:36:08  No: 607  IP: [192.*.*.*]

また,質問させていただきます。
動的配列の扱いについてです。
メインフォームでレコード型の配列を宣言しました。
この配列をVarを使って、共通関数の引数として渡します。
その渡された先の共通関数で、新たに領域を増やしたりできますか?
また、取った領域を0に戻すことはできるのでしょうか?

もしかしたら根本的に勘違いしているかもしれないのですが、
動的に取った配列の領域は自分で解放する必要はあるのですか?
今は、「Finalize」を使って明示的に解放しています。
わかりにくい文章ですみません。
よろしくお願いします。

編集    削除
にしの  2002-02-23 17:21:12  No: 608  IP: [192.*.*.*]

変数パラメータ(var hoge:integer;などvarをつけた引数)でポインタを渡せば、配列の初期化・解放などもできますよ。
GetMem,FreeMemなどは、そうして初期化していますよね。中身はアセンブリ言語ですが。

動的配列は、できるだけ解放すべきだと思います。
ただ、アプリケーション起動時に初期化して、実行中は配列の再定義などせずに、アプリケーション終了時に解放するタイプなら、解放する必要はないという意見もあります。
# freeは、「次回のメモリ確保のためにメモリを返却する」というものらしいです
実際、メモリを大量にGetMemして、そのまま終了すると、タスクマネージャのメモリ使用量はその通りに変化します。

1度の(アプリケーション)実行の中で、何度も初期化・解放を繰り返すのなら、解放は必須です。

編集    削除