AssertionFailedについて・・・ – プログラミング – Home

通知
すべてクリア

AssertionFailedについて・・・


Sily
 Sily
(@Sily)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

こんにちは。

ダイアログベースでプログラミングをしているのですが困ったことがあります。
AssertionFailedというエラーが出るのですが
これがどういった原因で出るのかが追求できません。
理由は次の2点・・・

・スレッドが同時にたくさん走っていることでデバッグ不可能。
・起こるとき起こらないときがあること。

この毎回同じメッセージなのでアサートが起こっている位置さえ特定できれば
いいのですが、この仕様だとそれがかなり困難なようです。

出るメッセージを記載しておきます。
実行後にアサートが出る位置を特定できる方法か
このメッセージだけで大体の原因がわかる方がいらっしゃいましたら教えてください。

少ない情報で申し訳ありません。よろしくお願いいたします。

DebugAssertionFailed!
*********
File:dbgheap.c
Line:1044

Expression:_CrtIsValidHeapPointer(pUserData)


引用解決済
トピックタグ
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

「再試行」ボタンを押すと該当コードが見られます。


返信引用
Sily
 Sily
(@Sily)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

あ、このdbgheap.cは内部コードのようなんで
見ても良くわかりませんでした・・・・


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

止まった時に、「スタックトレース」を表示すると
呼び出し階層を見ることができます。


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

>DebugAssertionFailed!
>*********
>File:dbgheap.c
>Line:1044
>
>Expression:_CrtIsValidHeapPointer(pUserData)

から分る(推測できる)事は pUserData が変なところを指しているらしい
ということです。では何処で誰が pUserData に変な値を入れているのかに
なりますね。 VC++6 なら、コールスタックを使ってこのアサートが出る原因
コードが何処なのか探せるでしょう


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

>あ、このdbgheap.cは内部コードのようなんで
あう;; よく確かめもしないで書いてました。

んでそのちょっと上に

* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
(ヘボ訳:違うヒープメモリのポインタが渡されてきたかも)

とあるので、DLLから渡されたポインタをEXE側で破棄したとかいうことが
原因かも??です。

ちなみにwin32 DLLでnewしたポインタをwin32 EXEでdeleteするコードを書いたら
似たエラーが出ました。


返信引用
Sily
 Sily
(@Sily)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

大変参考になる意見ありがとうございます。
事象はまれに出るため、いま現在は確認できていませんが
結果がわかり次第報告に伺います。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

ちなみに↓でも同じエラーが出ます。(島さんが書かれた事と同じ事だと思います)

char* p = new char[...];
delete[] (p+1);//違う場所をdeleteに渡す


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました