Microsoft C (MS-C) のCランタイムエラー
MS-C Ver.4.0以前のエラー番号対応表
| MS-C 4.0以前 | 5.0以降 | メッセージ |
|---|---|---|
| error 2000 | R6000 | Stack overflow |
| error 2001 | R6001 | Null pointer assignment |
| error 2002 | R6002 | Floating-point support not loaded |
| error 2003 | R6003 | Integer divide by 0 |
| error 2004 | R6004 | DOS 2.0 or later required |
| error 2005 | R6005 | Not enough memory on exec |
| error 2006 | R6006 | Bad format on exec |
| error 2007 | R6007 | Bad environment on exec |
| error 2008 | R6008 | Not enough space for arguments |
| error 2009 | R6009 | Not enough space for environment |
エラー内容
C ランタイム エラー R6000 - stack overflow
プログラムが、スタック スペースを使い果たしました。これは、プログラムが大量のローカル値を使っているか、再帰が多いときに起こります。
p-code を使うと、ネイティブ コードに比べて、多くのスタック スペースを必要とします。
大きなスタックを割り当てるには、以下のような方法があります。
- /F コンパイラ オプションを使ってコンパイルし直します。
- LINK の /STACK オプションを使ってリンクし直します。
- /STACK オプションを使って EXEHDR を実行します。
C ランタイム エラー R6001 - null pointer assignment
NULL セグメントの内容が、プログラムの実行中に変わりました。通常、NULL ポインタを使った不注意な割り当てのために、プログラムがこのエリアに書き込みました。
NULL セグメントは、通常は使われないローメモリ内の位置です。NULL セグメントの内容は、プログラム終了時にチェックされます。変更が見つかると、エラー メッセージが表示されます。
プログラムに NULL ポインタが含まれているだけでは、このエラーは起こりません。エラーが起こるのは、プログラムが NULL ポインタを使ってメモリに書き込みに行くときです。
このエラーを起こしたプログラムは、正常に動いているように見えても、NULL ポインタに対する参照を行なっていると、あとで問題を起こし、操作環境が変わると動かなくなることがあります。
C ランタイム エラー R6002 - floating-point support not loaded
プログラムに浮動小数点ライブラリが必要ですが、ライブラリがプログラムにリンクされていません。
次のような原因が考えられます。
- プログラムは、コプロセッサが必要になるオプションを指定してコンパイルされていますが、実行しているマシンにコプロセッサがインストールされていません。
- printf や scanf の書式指定に、浮動小数点の形式が含まれていますが、プログラムは浮動小数点形式の変数の値を持っていません。
- コンパイラは、浮動小数点サポートを必要なときだけロードしてプログラムのサイズを最小にしようとします。しかし、書式制御文字列中の浮動小数点のフォーマット指定が見つからないため、必要な浮動小数点のルーチンがロードされません。
- 浮動小数点の書式指定に対応する浮動小数点型の引数を指定するか、プログラムのどこかで浮動小数点の代入をしてください。この修正により、浮動小数点サポートがロードされます。
- 複数言語によるプログラムにおいて、C ライブラリが、プログラムがリンクされるときに FORTRAN ライブラリより前に指定されています。再リンクして C ライブラリを最後に指定してください。
C ランタイム エラー R6003 - integer divide by 0
整数をゼロで除算しようとしたために、予期しない結果になりました。
C ランタイム エラー R6005 - not enough memory on exec
生成されたプロセスをロードするためのメモリが足りません。
このエラーは、exec ライブラリ ルーチンで生成された子プロセスがエラーを起こし、オペレーティング システムが親プロセスに制御を返せなかったときに起こります。
C ランタイム エラー R6006 - invalid format on exec
exec 関数で実行されるファイルが、正しい実行可能ファイル形式ではありません。
このエラーは、exec ライブラリ ルーチンが生成した子プロセスでエラーが起き、オペレーティング システムが親プロセスに制御を返せなかったときに起こります。
C ランタイム エラー R6007 - invalid environment on exec
exec 関数の呼出しの途中で、オペレーティング システムが子プロセスにあやまった環境ブロックが与えられていることを見つけました。
このエラーは、exec ライブラリ ルーチンが生成した子プロセスでエラーが起き、オペレーティング システムが親プロセスに制御を返せなかったときに起こります。
C ランタイム エラー R6008 - not enough space for arguments
プログラムをロードするための十分なメモリはありますが、argv 配列用のメモリが足りません。
次に示すような対応策が考えられます。
- プログラムが使えるメモリ容量を増やしてください。
- コマンドラインの引数の数とサイズを減らしてください。
- 不要な変数を削除して環境のサイズを減らしてください。
C ランタイム エラー R6009 - not enough space for environment
プログラムをロードするための十分なメモリはありますが、envp 配列用のメモリが足りません。
- プログラムが使えるメモリ容量を増やしてください。
- コマンドラインの引数の数とサイズを減らしてください。
- 不要な変数を削除して環境のサイズを減らしてください。
プログラムが、コンパクト、ラージ、ヒュージのいずれかのメモリ モデルを使っているときは、LINK の /CPARM:1 コマンドライン オプションを指定することで、このエラーを回避することができます。このオプションは、near ヒープ スペースを far ヒープに割り当てないようにするためのものです。
C ランタイム エラー R6010 - abnormal program termination
abort 関数が呼び出されました。
このエラーは、abort 関数によって起こります。プログラムは、abort 関数のシグナル ハンドラが signal 関数を使って定義されていない限り、終了コード 3 で終了します。
C ランタイム エラー R6012 - illegal near-pointer use
プログラム中に、null の near ポインタが使われました。
このエラーは、ポインタ チェッキングが働いているときにだけ起こります。ポインタ チェッキングは、/Zr オプションか check_pointer プラグマで設定されます。
C ランタイム エラー R6013 - illegal far-pointer use
プログラム中に、範囲外の far ポインタが使われました。
このエラーは、ポインタ チェッキングが働いているときにだけ起こります。ポインタ チェッキングは、/Zr オプションか check_pointer プラグマで設定されます。
C ランタイム エラー R6016 - not enough space for thread data
プログラムは、_beginthread の呼出しを完了するための十分なメモリをオペレーティング システムから得られませんでした。
新しいスレッドが始まると、ライブラリはそのスレッド用に内部データベースを作らなければなりません。そのデータベースをオペレーティング システムが提供するメモリを使って拡張できないと、そのプロセスを続行できなくなります。
C ランタイム エラー R6017 - unexpected multithread lock error
プロセスが、C ランタイムのマルチスレッド ロックにアクセスしようとして、予期できないエラーが発生しました。
通常このエラーは、プロセスが不用意にランタイムのヒープ データを変更することによって起こります。また、オペレーティング システムやランタイムの内部エラーによって起きることもあります。
C ランタイム エラー R6018 - unexpected heap error
メモリ管理操作中に、予期できないエラーが発生しました。
通常このエラーは、プログラムが不用意にランタイムのヒープ データを変更することによって起こります。また、オペレーティング システムやランタイムの内部エラーによって起きることもあります。
ライブラリ内に、_heapchk および _heapwalk 関数がある場合、このエラーを診断するためにこれらの関数を使うことができます。
C ランタイム エラー R6019 - unable to open console device
プログラムは、CONIO.H で宣言されたコンソール関数を呼び出しましたが、オペレーティング システムがコンソールへのアクセスを許可しませんでした。
C ランタイム エラー R6020 - unexpected QuickWin error
プログラムに予期できない QuickWin のエラーが発生しました。
次のような原因が考えられます。
- プログラムは、QuickWin にアクセスしようとしましたが、プログラムに QuickWin ライブラリが組み込まれていませんでした。
- QuickWin の操作で回復不可能なエラーが発生しました。
C ランタイム エラー R6021 - no main procedure
プログラムには、main プロシージャがありません。
必要なすべてのオブジェクトとライブラリ モジュールが、実行可能モジュール内にリンクされているかどうかを確認してください。
出典
- エラー メッセージ リファレンス, Microsoft Corporation, 1993.