バッファオーバーフローを見つける

一昨日、メンバーからSOSメールがありました。

C++で、数キロバイト new するだけで、メモリ不足の例外が飛んでしまうとうい問題でした。
昨日も、今日も解決できていなかったようなので、私も調査に参加してたところ・・・

問題のnewより手前でアロケーションした領域を超えて受信データを書き込んでしまっていて、
ヒープの管理領域が壊れてしまって、newが「メモリ不足(本当は、メモリは不足していないけど)」となってしまったのでした。

なかなか問題が見つからなかったのは、オーバーランしているにも関わらず、プログラムが落っこちなくて、担当者は本当に「メモリ不足」だと思ってしまったからです。
スタックに確保された自動変数であれば、すぐランタイムエラーで落っこちてすぐ気がつくのでしょうが・・・

こういったものは、経験がないとなかなか見つけられないものですね。

こんなの簡単に見つけられるだろう!と思われるかもしれませんが、、勤務先で作った物ではなく、他が作った物だったので、難しかったようですね。