文書番号: 402080
最終更新日: 2004/04/27
この資料は以下の製品について記述したものです。
- Microsoft(R) QuickC(R) Compiler for MS-DOS(R) Version 2.0
- Microsoft(R) C Professional Development System Version 6.0
- Microsoft(R) C/C++ Development System for MS-DOS(R) and Windows(R)Version 7.0A
- Microsoft(R) Visual C++(TM) Development System Standard Edition forWindows(R) Version 1.0 (以下 Visual C++ 1.0)
- Microsoft(R) Visual C++(TM) Development System Professional Edition forWindows(R) Version 1.0 (以下 Visual C++ 1.0)
- Microsoft(R) Visual C++(TM) Development System for Windows(R) Version 1.5(以下 Visual C++ 1.5)
概要
この資料は、プログラム終了時に発生する以下のエラーの原因と解決方法について
説明したものです。
C ランタイム エラー R6001 ( null pointer assignment )
ヘルプやドキュメントの解説
『 NULL セグメントの内容が、プログラムの実行中に変わりました。通常、NULL
ポインタを使った不注意な割り当てのために、プログラムがこのエリアに書
き込みました。...』
ヘルプをご覧になっていない場合は、ヘルプの内容についてもご確認ください。
原因
いろいろな原因が考えられますが、すべて NULL セグメントにデータを設定することに
より発生するものです。具体的には、上記の例のような初期化されていないポインタ
変数 (アドレス NULL) に対して、データの設定を行う場合などです。
対処方法
ソースコードで使用しているポインタ変数をすべて調べて、初期化されているかを確認
して下さい。上記の例では、ポインタ変数 abc を初期化せずにデータを設定してい
ます。この場合、次のように修正します。
#include <stdio.h>
char *abc ;
char buff ; /* 実体となる変数を宣言 */
void main()
{
abc = &buff ; /* ポインタ変数の初期化 */
*abc = 'A' ;
printf ( "%c\n", abc ) ;
}
また別な方法として、NULL セグメントを調べる内部関数 _nullcheck を使用して
調べることもできます。しかしこの方法は高度な知識が必要になります。スタート
アップルーチンを充分にご理解頂いている方以外にはお薦め致しません。
extern void _far _nullcheck ( void ) ;
この内部関数を使用すると、NULL セグメントにデータが書き込まれていると次のエ
ラーメッセージが表示されます。
run-time error R6001
この_nullcheck 関数に関しての、サポート、説明等は一切お受けできません。また
実行して発生した、いかなる障害も、弊社では責任を負いませんのでご了承ください。
Visual C++ 1.0、 C/C++ 7.0A、または C 6.0 をお使いのお客様は、スタートアッ
プルーチンに含まれている chksum.asm のファイルに _nullcheck 関数についての
ソースコードが記述されていますので参考にして下さい。
Keywords: KBINFO KB402080
Technology: kbAudDeveloper kbCCompPDS600DOS kbCCompSearch kbQC200 kbvc150 kbVCsearch kbZNotKeyword3 kbZNotKeyword8