none
ntdll.dllの例外0xc0000374で、アプリ終了 RRS feed

  • 質問

  • こんにちは

    VB6で作成したアプリケーション、

    画面中のRichTextBoxコントロールに、Wordで編集した内容(特に表)をコピペする時に、

    異常が出て、落ちました。

    イベントビューアを確認したところ、下記のような障害が発生しました。

    全般:

    障害が発生しているアプリケーション名: ***.exe、バージョン: 3.1.0.39、タイム スタンプ: 0x54b604ab
    障害が発生しているモジュール名: ntdll.dll、バージョン: 6.1.7601.18247、タイム スタンプ: 0x521ea91c
    例外コード: 0xc0000374
    障害オフセット: 0x000c3873
    障害が発生しているプロセス ID: 0x1520
    障害が発生しているアプリケーションの開始時刻: 0x01d0554e09277ee6
    障害が発生しているアプリケーション パス: ..........\***.exe
    障害が発生しているモジュール パス: C:\Windows\SYSTEM32\ntdll.dll
    レポート ID: 0b728d43-c142-11e4-83e0-001bdc0590e5

    詳細:

    - <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
    - <System>
      <Provider Name="Application Error" /> 
      <EventID Qualifiers="0">1000</EventID> 
      <Level>2</Level> 
      <Task>100</Task> 
      <Keywords>0x80000000000000</Keywords> 
      <TimeCreated SystemTime="2015-03-03T01:10:14.000000000Z" /> 
      <EventRecordID>57078</EventRecordID> 
      <Channel>Application</Channel> 
      <Computer>Eryou_S-THINK</Computer> 
      <Security /> 
      </System>
    - <EventData>
      <Data>***.exe</Data> 
      <Data>3.1.0.39</Data> 
      <Data>54b604ab</Data> 
      <Data>ntdll.dll</Data> 
      <Data>6.1.7601.18247</Data> 
      <Data>521ea91c</Data> 
      <Data>c0000374</Data> 
      <Data>000c3873</Data> 
      <Data>1520</Data> 
      <Data>01d0554e09277ee6</Data> 
      <Data>..........\***.exe</Data> 
      <Data>C:\Windows\SYSTEM32\ntdll.dll</Data> 
      <Data>0b728d43-c142-11e4-83e0-001bdc0590e5</Data> 
      </EventData>
      </Event>

    解決対策がありましたら、教えて頂きたいと思います。

    宜しくお願い致します。



    2015年3月3日 6:17

回答

  • > 例外コード: 0xc0000374

    これはSTATUS_HEAP_CORRUPTION、ヒープ破損を意味します。プログラムのある個所で不正なメモリアクセス(特に不正な領域への書き込み)をしたことを意味します。書き込みをした瞬間には検出できませんでしたが、その後、新たにメモリ確保処理をしている最中に管理領域に矛盾を見つけたために処理続行不能となり、アプリケーションが停止しています。質問ではコピー処理の際にメモリ確保が行われやすいということなのだと思います。

    ですので、解決するためにはコピペそのものではなく、それ以前に行った処理のどこかに問題があるのでそれを見つける必要があります。

    2015年3月3日 6:53

すべての返信

  • > 例外コード: 0xc0000374

    これはSTATUS_HEAP_CORRUPTION、ヒープ破損を意味します。プログラムのある個所で不正なメモリアクセス(特に不正な領域への書き込み)をしたことを意味します。書き込みをした瞬間には検出できませんでしたが、その後、新たにメモリ確保処理をしている最中に管理領域に矛盾を見つけたために処理続行不能となり、アプリケーションが停止しています。質問ではコピー処理の際にメモリ確保が行われやすいということなのだと思います。

    ですので、解決するためにはコピペそのものではなく、それ以前に行った処理のどこかに問題があるのでそれを見つける必要があります。

    2015年3月3日 6:53
  • アプリケーションのパスが出ていますが、秘匿しなくて良かったんでしょうか。
    公開されているサイトにどのようなプロジェクトが動いているか、どういったレベルなのかが漏れると、置かれている立場によって懲戒や損害賠償の対象になる恐れがあります。
    2015年3月3日 12:56
    モデレータ
  • アプリケーションのパスが出ていますが、秘匿しなくて良かったんでしょうか。
    公開されているサイトにどのようなプロジェクトが動いているか、どういったレベルなのかが漏れると、置かれている立場によって懲戒や損害賠償の対象になる恐れがあります。

    Azulean様

    昨日、慌ててアップしました。

    ご指摘、ありがとうございます。

    2015年3月4日 1:08
  • > 例外コード: 0xc0000374

    これはSTATUS_HEAP_CORRUPTION、ヒープ破損を意味します。プログラムのある個所で不正なメモリアクセス(特に不正な領域への書き込み)をしたことを意味します。書き込みをした瞬間には検出できませんでしたが、その後、新たにメモリ確保処理をしている最中に管理領域に矛盾を見つけたために処理続行不能となり、アプリケーションが停止しています。質問ではコピー処理の際にメモリ確保が行われやすいということなのだと思います。

    ですので、解決するためにはコピペそのものではなく、それ以前に行った処理のどこかに問題があるのでそれを見つける必要があります。

    佐祐理様

    ご回答、ありがとうございます。

    この方向で、チェックしてみます。

    よろしくお願いします。


    2015年3月4日 1:15
  • > 例外コード: 0xc0000374

    これはSTATUS_HEAP_CORRUPTION、ヒープ破損を意味します。プログラムのある個所で不正なメモリアクセス(特に不正な領域への書き込み)をしたことを意味します。書き込みをした瞬間には検出できませんでしたが、その後、新たにメモリ確保処理をしている最中に管理領域に矛盾を見つけたために処理続行不能となり、アプリケーションが停止しています。質問ではコピー処理の際にメモリ確保が行われやすいということなのだと思います。

    ですので、解決するためにはコピペそのものではなく、それ以前に行った処理のどこかに問題があるのでそれを見つける必要があります。

    佐祐理様

    こんにちは

    ご指摘の方法で、この前の処理をチェックしてみました、

    コピペ処理の前に、RichTextBoxコントロールに、テキストを読み込む処理があります。下記のよう、

            Open wstrFilename For Input As wintFileNo

            Do While Not eof(1)                                      ' ファイルの終端までループを繰り返します。
                gstrTempData = Input(1, wintFileNo)             ' 1 文字のデータを読み込みます。
                gstrTempText = gstrTempText & gstrTempData
            Loop

            Close wintFileNo
            pctlControl.TextRTF = gstrTempText

    この処理で、STATUS_HEAP_CORRUPTION、ヒープ破損の原因になれますか?

    すみません、

    お手数をおかけしますが、

    どうぞよろしくお願いいたします。

    2015年3月18日 6:36
  • VB6は未経験ですが、EOFの引数はfilenumberなので1ではなくwintFileNoの必要がありませんか? これがヒープ破損を引き起こすものなのかは私には判断できません。
    2015年3月18日 6:49
  • Application Verifier を使って調べてみては?

    ----------------------------------------------------------
    Windows SDK ツール:Application Verifier のご紹介
    http://blogs.msdn.com/b/japan_platform_sdkwindows_sdk_support_team_blog/archive/2011/05/30/windows-sdk-application-verifier.aspx
    ----------------------------------------------------------

    2015年3月18日 7:39
  • VB6は未経験ですが、EOFの引数はfilenumberなので1ではなくwintFileNoの必要がありませんか? これがヒープ破損を引き起こすものなのかは私には判断できません。

    佐祐理様

    ご回答ありがとうございます。

    確かに、EOFの引数はfilenumbeですが、ヒープ破損を引き起こす原因は、

    これではなく、この処理の前、Undo&Redoを行うため、

    RichTextBoxコントロールの内容を一時保存時することです。

    ありがとうございました。


    2015年3月30日 0:26
  • Application Verifier を使って調べてみては?

    ----------------------------------------------------------
    Windows SDK ツール:Application Verifier のご紹介
    http://blogs.msdn.com/b/japan_platform_sdkwindows_sdk_support_team_blog/archive/2011/05/30/windows-sdk-application-verifier.aspx
    ----------------------------------------------------------

    ご回答ありがとうございます。

    ご紹介のApplication Verifierを使ってみましたが、

    エラーの内容を分析できませんでした(苦笑)

    2015年3月30日 0:30