プログラムの虫

自分が犯した事のあるプログラムミスを紹介して、
今後バグがあったときの参考にしようと思う。
プログラムをしない人には関係ない話。
まあ、ほとんど自分のためです。今後も続ける予定。

C++で下のように書いてしまいました。
void CHoge::Delete()
{
    if(pX!=NULL){
        delete pX;
    }
}
本当はこんなふうに書くつもりでした。
void CHoge::Delete()
{
    if(pX!=NULL){
        delete pX;
        pX = NULL; // ←ここを書き忘れた
    }
}
pXにNULLを入れないと、Delete()を2度目以降呼び出すときに、
一度開放したはずのメモリをまた開放してしまう可能性があるということ。

このミスはたちの悪いことに、
プログラムを実行してもなかなかエラーが出てきません。
不正にメモリ領域を開放しようとするまで、
見た目、普通に動作してしまいます。

プログラムを走らせたとき、初めの方は難なく動いていたはずが、
動作がおかしくなったというときは、メモリ周りを疑ってみるといいかも。