アプリ版:「スタンプのみでお礼する」機能のリリースについて

dat.datファイルの情報を、WIN32_FIND_DATA構造体に得るために

 handle = FindFirstFile("dat.dat", &win32finddata);
 FindClose(handle);
 //この後でwin32finddataを利用。

としているんだけど、今回はハンドルを使わないから

 FindFirstFile("dat.dat", &win32finddata);
 //この後でwin32finddataを利用。

として、FindFirstFileの返り値の取得と、FindClose関数を
省略してもいいんですか?

A 回答 (2件)

FindFirstFile() は、*ハンドルを割り当てて* それを返してくれる関数ですから、


呼び出した側で使う/使わないにかかわらず、解放してあげる必要があります。

まあ、割り当てっぱなしになっていても、多少のメモリを占有しているだけです
から実害は少ないかもしれませんが、ずーっとメモリに常駐しているプログラム
だと、いずれ効いてきます。

返り値の取得を省略すると、FindClose() に渡すものが決まりませんから、これも
省略できません。

この回答への補足

ありがとうございます。
質問してよかったです。

補足日時:2002/09/08 22:27
    • good
    • 0

アプリケーション側でFindFirstFileの関数血を無視していてもFindFirstFile自信はHandleを作成しています。


結果としてFindCloseされないHandleはメモリリークを引き起こします。
また、Handleというより関数血を無視しているわけですからエラーチェックが複雑になります。
(SetLastError→FildFirst→GetLastErrorという手順か?)

FindFirstFileの返り値の取得と、FindClose関数の省略が即何らかの不具合を引き起こすわけではありませんが、推奨されない使い方であり、アプリケーション全体の動作を阻害する可能性はあります。
少なくともリークしたメモリは何らかの不具合を引き起こす可能性が残ります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
今まであいまいに扱ってきたから、これに似た関数も
きっとこれと同じくハンドルの取得と開放が必要だと
思うから、見直さないといけないことにも気がつきました。

お礼日時:2002/09/08 22:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!