ある日、いつもどおりゲームのデバッグをしていたときのこと。
「あれ?BGMたりなくね?」
BGMをロードし忘れたことに気づいた僕はさっそくクラスメンバ変数にBGM用のハンドルを追加しました。
そしてデバッグをする!!!
「ドン!!」
!?
「HEAP CORRUPTION DETECTED」
「な、なんじゃこりゃあぁあぁぁあああ!!!!!」
初めて出てくるメッセージだったので僕には原因がサッパリわかりませんでした。
さっそく原因をググります。
通常ではmalloc 、newなどで確保されたメモリのdelete処理で起こりうるエラーらしいのですが、
ボクはnewもmallocも使ってません。
次にもう一つの原因候補
ポインタ、配列の要素がおかしい、
これはあるかもしれないなぁと思い一通り見るも特に原因がつかめず、
そもそも変数一個追加しただけでメモリ破壊とかおかしくね?
という結論に至り、最悪そのメンバを使わずに(public、グローバルで宣言する分にはなにも起きなかったので)
グローバルで作っちゃおうかなぁと思っていた矢先、
今日の朝、エラーの起きる箇所が自分の思っていた場所と違い
もしやと思いつつ、別の箇所を探していたところ、グローバル変数に代入している処理を発見。
怪しく感じたボクはその処理をコメントアウトします。
そしてデバッグすると…
エラーは出なくなった!!
そのグローバル変数は配列のポインタの役目を持った変数で、
もしかしたらその変数に変な値が入って(どうして入ったかはわからないけど)
配列の変なところを指していたのかもしれませんが、とりあえずその変数が原因であったことだけはわかりました。
そして、コメントアウトをもう一回外してデバッグしてみる
同じエラーが出るとばかり思っていましたが、
なんと次にデバッグしたら…
エ ラ ー が 出 な い の で す
う~ん、不可解な怪奇現象です。( ;-ω-)
そろそろコードが汚くなってきたのかなぁ…
ちゃんと見直していこう
怪奇現象~現れた謎のバグ~
Re: 怪奇現象~現れた謎のバグ~
自分はそういうのがあると怖くなって原因を突き止めるまでぐぐり続けてしまう人です。
怖い・・・・・
もしかしたらDXライブラリ内部の処理でのことでは?
自分も検索しましたが、やはりわかりません・・・・・
怖い・・・・・
もしかしたらDXライブラリ内部の処理でのことでは?
自分も検索しましたが、やはりわかりません・・・・・
最後に編集したユーザー Gu-dara on 2011年1月08日(土) 13:09 [ 編集 1 回目 ]
Re: 怪奇現象~現れた謎のバグ~
ローカル変数でバッファオーバーランを起こしてる時など、それまでのコードではたまたま偶然上手く動いていたのが、変数1個追加する事で顕在化することもありますね。
こんな時、一瞬コンパイラのバグかと思ってしまったりしますが、格言に従い自分のコードを疑うようにしています。
そして人のせいにします。
そういった場合は、とりあえずトイレに籠もり現実から逃げてしまうのが大人の対処法です。
こんな時、一瞬コンパイラのバグかと思ってしまったりしますが、格言に従い自分のコードを疑うようにしています。
そして人のせいにします。
そういった場合は、とりあえずトイレに籠もり現実から逃げてしまうのが大人の対処法です。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
Re: 怪奇現象~現れた謎のバグ~
自分も同じバグに遭遇したことがあります…
ビビりますよね
自分は全然関係ない所で配列の有効範囲外にアクセスしていたことが原因でした。
ビビりますよね
自分は全然関係ない所で配列の有効範囲外にアクセスしていたことが原因でした。
Re: 怪奇現象~現れた謎のバグ~
Gu-daraさん
ボクも似たようなものですw
なんとか原因を突き止めたいですよねぇ^^;
もうまた起きたらどうしようと一回でも変なバグがでるともう怖くて怖くて…
へろりさん
変数一個追加でバグもあるあるですよねww
(今回のゲームでは幸いまだでてきていませんがそれでもいつ出るかわからなくて怖いです^^;)
ボクの現実逃避方法は寝ることです。
そして次の日には前のバグの悩みなんて吹き飛んでいるのです(ぇ
ソフト屋さん
本当に恐ろしいです><
プログラム「あぁ、明日ちょっくらバグ起こすからよろしく~」
とかコードが事前に報告してくれればいいのですが、いかんせんC言語は中二病なので
言うこと聞いてくれません、悲しく切ない今日この頃です。
GRAMさん
ボクのバグも多分配列の範囲の外にアクセスしてた可能性が高いですw
(配列の番号を決める変数をいじったら直ったので)
やっぱりこういう変なバグはあるあるなんですね…
ボクも似たようなものですw
なんとか原因を突き止めたいですよねぇ^^;
もうまた起きたらどうしようと一回でも変なバグがでるともう怖くて怖くて…
へろりさん
変数一個追加でバグもあるあるですよねww
(今回のゲームでは幸いまだでてきていませんがそれでもいつ出るかわからなくて怖いです^^;)
ボクの現実逃避方法は寝ることです。
そして次の日には前のバグの悩みなんて吹き飛んでいるのです(ぇ
ソフト屋さん
本当に恐ろしいです><
プログラム「あぁ、明日ちょっくらバグ起こすからよろしく~」
とかコードが事前に報告してくれればいいのですが、いかんせんC言語は中二病なので
言うこと聞いてくれません、悲しく切ない今日この頃です。
GRAMさん
ボクのバグも多分配列の範囲の外にアクセスしてた可能性が高いですw
(配列の番号を決める変数をいじったら直ったので)
やっぱりこういう変なバグはあるあるなんですね…