お風呂の温度、何℃にしてますか?

HANDLE handle = HeapCreate( 0, 0, 0 );
HeapDestroy( handle );
HeapDestroy( handle );

このように、二重に開放すると、強制終了されてしまいますよね(不定義?)。

handleが有効であるときのみ開放すればいいみたいですが、プログラムの流れ以外で、どうやってそれが有効であることを判断すればよいのでしょうか?

handleの値自体はHeapDestroy前後で変わらないようなので、どうすればいいのかわかりません。

よろしくお願いしますっ

A 回答 (1件)

> handleが有効であるときのみ開放すればいいみたいですが、


> プログラムの流れ以外で、どうやってそれが有効であることを判断すればよいのでしょうか?

普通はプログラムの流れで判断するものなので、
基本的にできないと思います。
API に食わせてみて、不正なハンドルエラーを取るとか、
そのくらいでしょうか。(このようなことは推奨しません)

> handleの値自体はHeapDestroy前後で変わらないようなので、
> どうすればいいのかわかりません。

色々な考え方があるでしょうが、例えば変わらないなら変えてあげます。

未検証ですが、イメージはこんな感じでしょうか。

BOOL
MyHeapDestroy(HANDLE& handle)
{
  if(handle != NULL)
  {
    BOOL result = ::HeapDestroy( handle );
    handle = NULL;
    return result;
  }
  return TRUE; // 成功と扱う場合
}
    • good
    • 0
この回答へのお礼

どうもありがとうです。

やはりHeapDestroy単体での判断は無理でしたか。

となると、私も、示してもらったMyHeapDestroyのような考えが一番有効だと思います。

ただ、最後の
return TRUE
は、「成功と扱う場合」ではなく、「はじめからNULLであった場合」ですね。

お礼日時:2006/04/22 10:03

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


おすすめ情報