ME 06 - me06 - MemError (更新日: 97 年 9 月 12 日)
Q: デバッグ中にMemError()がいつもnoErrを返すのですが、何が悪いのでしょうか?
A: High levelデバッガを使ってるのでしたら、何も問題はありません。High levelデバッガはstepでコードを追っている時、度々Memory Managerの関数を呼び出しています。Memory Managerは呼び出されるとMemError()の値をセットしますが、デバッガのmemory requestが成功した場合(noErrが返る)、次に呼ばれるアプリケーションからのMemError()の結果がクリアされてしまいます。この問題を解決するには、Memory ManagerとMemError()のstepによる呼び出しを避けなければなりません。MemError()の直後にbreak pointを設定しrunすれば、通常デバッガなしで発生するエラーと同じ値を得る事ができます。また、MacsBugなどのlow levelデバッガでは、このような問題は起きません。
一般的に、NewHandleやNewPtrが返すHandleやPtrを確認し、nilである場合にのみMemError()を呼び出して、エラー番号を得て下さい。handleやpointerの値を確認せずにMemError()を呼び出すのは良い方法ではありません。
[ Technical Q&A's : Operating System Services : Memory : ME06 ]
|