Hatena::ブログ(Diary)

群衆三世 RSSフィード

 | 

2010年06月16日

ヒープエラー?Ntdll.dllが死ぬでござるの巻き!

| 17:21 |

 仕事が超暇。

 自作の、例のアレを作る時間の確保も余裕。

 非常に進捗具合は良い感じです。

 良い具合なんですけど、変なエラーが出ます。

ヒープエラーが止まらない

 プログラムをビルドして、デバッグ実行すると「ヒープが壊れてる」みたいな事をVisual C++ 2010 Express に言われちゃうです…。しかもNtdll.dllでブレイクしちゃうっていう。俺のプログラム内じゃないのかよっ。


 事の経緯はこんな感じ。

  1. Visual C++ 2010 Express Editionが出た事を知る
  2. 勢い余ってインストール
  3. 2008と同居できるか不安になる
  4. 2010をアンインストール
  5. 以前作ったマップ自動生成機能を移植する
  6. 2008でビルドして実行
  7. ヒープエラーが出る
  8. デバッガがプログラムにアタッチ出来なくなる
  9. VSごと死亡→再起動
  10. 環境が壊れたと思い、2008を再インストール
  11. やっぱりダメ。同じ現象が起こる
  12. 2008をキレイサッパリ消して、2010をもう一回インストール
  13. 2010でビルドして実行するけど、やっぱダメ。
  14. こりゃープログラムがどこかおかしいのか?←ここ!

 メモリがらみのバグは訳が分からんとです…。

確認したこと

 さしあたり、一度deleteした領域を、もう一回deleteしてるか、newしてないのにdeleteしてるか、どっちかだと思うんです。

 あとはあれだ。

 配列をぶっちぎってアクセスしてるか。


 両方とも、めっちゃ確認した!

 けど問題なさそうなんだよねー…。

いいデバッグツールはないもんか

 ヒープエラーの原因を突き止めるツールで、うまいのないっすかね?

 メモリリーク(解放もれ)だったら何とかなるのに!!

 MSMicrosoft Application Compatibility Toolkit 5.6とやらを入れて、これからいろいろ試してみます・・。

 日頃勉強している、英語リーディングの成果を見せてやるっ(涙

違うっぽい

 うぐー、なんかこれは期待してるツールと違うぞ!?

 わけわかrん

続報

 何となく解決したっぽい。

MELMEL 2010/06/16 23:33 >仕事が超暇。

山あり谷ありが極端なのもやっかいですよね…
平たく丁度良ければいいんでしょうけど
まあそううまくはいかないものでしょうか…

AshAsh 2010/06/20 11:58 メモリ系は本気何処が障害になって
どこで異常が発生するかわかりませんもんねー(苦笑)。
ただ、2010 が何か悪さをしているかどうか
かなり判断難しいものがあるなぁ……
.NET Framework になって改善したと謳っている
部分も、実際にはアンインストしても残っている
ものが結構あったりしますしね。

ただまあ、ここまで来たのだからメイン開発は
2010 に変えてしまうのも吉だろうけども。

非常に古典的な方法ですが、個人的には再現率が
高いエラーであれば、ソースを段々コメントで
消しながら再現するかどうかをチェック。
発生原因となる箇所を特定するのが一番ではないかと……
頑張れ〜〜〜。

gunsyu3gunsyu3 2010/06/29 00:26 >MELさん
 極端だと死んだりクビになったりするので、
 うまいことバランスがとれたらいいんでしょうねー・・。

>Ashさん
 実際問題、マシンをリブートした直後にリビルド→実行でも
 「ヒープが壊れてる云々」
 って言われて、デバッガからのアタッチ中で死ぬので、
 どうやらプログラムがおかしいわけではないようです・・・。

 コメントを入れて問題箇所の二分探索はよくやりますw

トラックバック - http://d.hatena.ne.jp/gunsyu3/20100616/1276676516
 |