2008年2月19日火曜日

thisを見よ

 なーんか動作がおかしいぞ?と思ったら、まずはthisを見よ。void*にキャストしたり、uintptr_tを使ったりといった場合は穴が開くほど見よ。
 デバッグビルドなら0xcdcdcdcd、0x00000000、0xfeeefeeeを指してないか確認せよ。この値を見るだけで、もう原因はほぼわかる。 → ココ
 これ以外の値がならば、別のインスタンスを指していないか確認せよ。別のインスタンスどころかでたらめかどうかは、普段からデバッガを使っているわれわれにとっては、異常な値かどうかなど一目でわかるはず。
 thisが異常な値を指していても、メンバ変数にアクセスしなければ動いてしまう可能性もあるし、また、アクセスしても動いてしまう可能性もゼロではない。とにかく動作がおかしくなる。

 この基本を忘れて、1日つぶしてしまったので書いておく。