8月21日(晴れ)

トップ > 日誌 > 8月21日(晴れ)

バッファオーバーフロー

今日は丸一日自室にこもって作業です。最近はなんだかんだと場所を変えて仕事をしたり習い事に出かけたりするので、純粋に一日部屋に居るというのは結構珍しいかもしれません。昼過ぎにはちょっと公園を散歩してきました。まだ日差しは強いですが、時折吹き抜ける風は心地よくなってきたかな、という感じがします。

もうかなり前の話なんですが、何度デバッグしても全然意味の分からない不具合に半日悩んだことがあります。ある変数の値がふいに予期せぬものに変わってしまうというものなのですが、いくらその変数をトレースしても、まったく不備は見つからず、さらにはその変数に値を代入している箇所を全て削除してもまだ値が変わり続ける、という事象まで確認されました。iOSアプリの実装でC言語のポインタを扱っている箇所です。Cの経験があるプログラマなら想像がつくでしょうけれど、バッファオーバフローが発生していて、隣の変数に書き込んでいた値がはみ出して、不具合の出ていた変数の中身を時々書き換えてしまっていたことが原因でした。

JavaScript,Ruby,Pythonなどのような言語だけしか触れたことがなければ、ある変数が確保された領域を逸脱して別の領域にデータを書いてしまうなんて、怪奇現象に近いレベルの話に聞こえるのではないでしょうか。たまたま大学の頃の課題でやっていたような知識で、何とか厄介なバグを潰して回避できたという、”年の功自慢”みたいな話が最近増えてきたなぁ…。


日誌一覧へ