[VC60] MSVCRT.DLL でページ違反が発生する問題

文書翻訳 文書翻訳
文書番号: 190536 - 対象製品
この記事は、以前は次の ID で公開されていました: JP190536
すべて展開する | すべて折りたたむ

目次

現象

C ランタイム ライブラリ (以下 CRT) の共有 DLL である MSVCRT.DLL バージョン 6.00.8168.0 または 6.00.8267.0 がインストールされると、それまでは期待通りに動作していたアプリケーションにおいて以下のエラーが発生することがあります。
<アプリケーション名> のページ違反です。モジュール MSVCRT.DLL、アドレス: XXXX:XXXXXXXX

原因

Visual C++ 6.0 で提供される C ランタイム ライブラリ (MSVCRT.DLL) では、小ブロック ヒープ (SBH) 技術の向上のため、これまでヒープの外部に置かれていたヒープ制御構造体を割り当てられたメモリ領域に置くようになりました。結果的に、メモリへの上書きは小ブロック ヒープのポインタ アドレスを変えることになり、これまではメモリを上書きしても動作していたアプリケーションがアクセス違反を引き起こすことがあります。小ブロック ヒープ メモリ管理にかかわるこの問題は、C ランタイム ライブラリ (MSVCRT.DLL) の技術向上のための仕様によるものです。

解決方法

アプリケーション ベンダーは、頒布するアプリケーションが正確に CRT の小ブロック ヒープを使用していることを保証する必要があります。

詳細

小ブロック ヒープは、1 KB 以内の小さなメモリ領域を確保します。Visual C ++ 6.0 では、この技術の向上のため、これまではヒープの外部にあるテーブルに置かれていた制御構造体を、割り当てられたメモリ ヒープに添付するように変更がおこなわれました。この仕様変更のために、古いバージョンの C ランタイム ライブラリ (MSVCRT.DLL) 上では、データを上書きしても問題の発生しないプログラムの潜在的な問題を露見させることがあります。小さなメモリ操作の誤りが、他のメモリ ブロックを破壊し、アプリケーションを異常終了させる原因となります。

この問題は、デバッグ ヒープを使用することで解決することができます。デバッグ ヒープを有効にするには、デバッグ ビルドのアプリケーションでプロセスが初期化されるタイミングで、CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_CHECK_ALWAYS_DF) を呼び出す必要があります。

関連情報

サポート技術情報

文書番号: 197298
タイトル: [VS60] Microsoft Libraries Update について

オンライン ドキュメント

Visual C++ プログラマーズ ガイド :「バッファへの上書きエラーとメモリ リークを解決するには」「_CrtSetDbgFlag」「デバッグ ヒープの使い方」

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 190536 (最終更新日 1999-03-19) をもとに作成したものです。

プロパティ

文書番号: 190536 - 最終更新日: 2004年3月31日 - リビジョン: 3.0
この資料は以下の製品について記述したものです。
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
キーワード:?
kbfix kbvs600sp2 kbdss kbprb vc50 kbcncl vc60 KB190536
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com