- ベストアンサー
FindFirstFile ハンドル開放
dat.datファイルの情報を、WIN32_FIND_DATA構造体に得るために handle = FindFirstFile("dat.dat", &win32finddata); FindClose(handle); //この後でwin32finddataを利用。 としているんだけど、今回はハンドルを使わないから FindFirstFile("dat.dat", &win32finddata); //この後でwin32finddataを利用。 として、FindFirstFileの返り値の取得と、FindClose関数を 省略してもいいんですか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
FindFirstFile() は、*ハンドルを割り当てて* それを返してくれる関数ですから、 呼び出した側で使う/使わないにかかわらず、解放してあげる必要があります。 まあ、割り当てっぱなしになっていても、多少のメモリを占有しているだけです から実害は少ないかもしれませんが、ずーっとメモリに常駐しているプログラム だと、いずれ効いてきます。 返り値の取得を省略すると、FindClose() に渡すものが決まりませんから、これも 省略できません。
その他の回答 (1)
- toysmith
- ベストアンサー率37% (570/1525)
アプリケーション側でFindFirstFileの関数血を無視していてもFindFirstFile自信はHandleを作成しています。 結果としてFindCloseされないHandleはメモリリークを引き起こします。 また、Handleというより関数血を無視しているわけですからエラーチェックが複雑になります。 (SetLastError→FildFirst→GetLastErrorという手順か?) FindFirstFileの返り値の取得と、FindClose関数の省略が即何らかの不具合を引き起こすわけではありませんが、推奨されない使い方であり、アプリケーション全体の動作を阻害する可能性はあります。 少なくともリークしたメモリは何らかの不具合を引き起こす可能性が残ります。
お礼
ありがとうございます。 今まであいまいに扱ってきたから、これに似た関数も きっとこれと同じくハンドルの取得と開放が必要だと 思うから、見直さないといけないことにも気がつきました。
補足
ありがとうございます。 質問してよかったです。