メモリに関するエラーの回避方法

サポートが終了した KB の内容についての免責事項

この記事は、マイクロソフトがサポートを提供しなくなった製品について記述しています。 したがって、この記事は「現状のまま」で提供され、更新されることはありません。

概要

この資料はメモリ上のデータ格納の仕様とメモリに関するエラーの発生原因および
回避方法について記述しています。

メモリに格納されるデータの種類と場所

メモリに関するエラーの対処には、メモリ上にそれぞれのデータがどのように
配置されているか、理解しておく必要があります。QuickBASIC 4.2/4.5、
BASIC 7.1、Visual Basic for MS-DOS 1.0 において 640KB のコンベンショナル
メモリは、大きく分けて次の 5 つの部分で構成されています。
  1. Microsoft(R) MS-DOS(R) Operating System (以下 MS-DOS) のシステム領域
  2. 統合環境のコード (プログラミング環境) または、アプリケーションのコード (EXE ファイル)
  3. near メモリ (DGROUP) この領域の確保容量は最大 64KB です。また、主に次のデータが格納されます。
    • BASIC のランタイム情報
    • 記述子 (内部的に可変長文字列や配列の情報を管理するための 4 バイトの変数。 前半 2 バイトでデータの長さを、後半 2 バイトでデータが実際に格納されて いるアドレスのオフセット値を表します。)
    • 変数および定数 (動的配列および far 文字列を除く)
    • スタック (デフォルトで 2 ~ 3KB 確保されます)
  4. Quick ライブラリの格納領域 (プログラミング環境) または、ランタイム モジュールの格納領域 (ランタイム分離型 EXE ファイル)
  5. far メモリ

エラーの対処方法

これらのエラーは根本的にメモリが不足している状況では対処できないことが
あります。安定して動作するメモリ容量は環境により大きく左右されますが、
約 480KB の空きメモリがあることが理想的です。
メモリが足りません (QuickBASIC 4.2/4.5)、Out of memory (BASIC 7.1)、メモリが不足です (Visual Basic for MS-DOS 1.0) ================================================================================ エラー コードは 7 です。

原因

作業に必要なメモリが確保できません。

回避方法

  1. CONFIG.SYS で設定している MS-DOS のバッファ サイズを減らしてください。
  2. メモリに常駐しているプログラム (TSR) や不要なデバイス ドライバを外して ください。
  3. 統合環境では、不要なドキュメント ファイルやインクルード ファイルを 解放してください。
  4. 配列を使用している場合は、$DYNAMIC メタコマンドを使用して動的配列にして ください。
  5. BASIC 7.1、Visual Basic for MS-DOS 1.0 で統合環境を使用している場合は、 /Ea オプションを指定して再起動してください。

配列の添字が許される範囲にありません (QuickBASIC 4.2/4.5)、Subscriptoutofrange(BASIC 7.1)、添字が有効範囲にありません (Visual Basicfor MS-DOS 1.0)

エラー コードは 9 です。

原因

  1. 参照している配列の添字が、宣言された数や次元を超えています。
  2. 静的配列のサイズが 64KB を超えています。
  3. 動的配列を使用している場合、コンパイル時にオプション /AH を指定しま せんでした。
  4. 固定長文字列配列の長さが奇数のため、セグメント ブロック内にギャップ が発生しました (BASIC 7.1、Visual Basic for MS-DOS 1.0 のみ)。

回避方法

  1. 配列のサイズを小さくするか、$DYNAMIC メタ コマンドで動的配列にして ください。
  2. 配列要素の長さを偶数にしてください。
文字領域が足りません (QuickBASIC 4.2/4.5)、Out of string space (BASIC 7.1)、文字領域が不足です (Visual Basic for MS-DOS 1.0) ================================================================================ エラー コードは 14 です。

原因

静的変数や記述子が多すぎて near メモリの文字列領域が不足しました。

回避方法

  1. 可変長文字列を固定長文字列にしてください。
  2. 配列を $DYNAMIC メタコマンドで動的配列にしてください。
  3. 統合環境の場合は不要なドキュメント ファイル、ソース ファイル、 インクルード ファイルを解放してください。
スタック領域が足りません (QuickBASIC 4.2/4.5)、Out of stack space (BASIC 7.1)、スタック領域が不足です (Visual Basic for MS-DOS 1.0) =============================================================================== このエラーはトラップすることができません。

原因

FUNCTION プロシージャの再帰呼び出しのネストが深くなりすぎたり、
アクティブなプロシージャ呼び出しや引数が多すぎたために near メモリの
スタック領域が不足しました。

回避方法

  1. STACK (BASIC 7.1、Visual Basic for MS-DOS 1.0 のみ) または CLEAR ステートメントでスタック領域を増やしてください。
  2. プロシージャ内で大きな配列を使用しないようにしてください。
  3. 引数をグローバル変数にしてください。

Program-memory overflow

コンパイル時のエラーです。

原因

コンパイル中に生成されたコード セグメントが 64KB を超えました。

回避方法

  1. デバッグ オプションを指定している場合は指定しないようにしてください。
  2. プロシージャ部分を別ファイルに移動させプログラムを分割してください。 コンパイル時に表示されるバイト数の意味は以下の通りです。なお、 この値が 0 の場合、コード セグメントが大きすぎてコンパイルができな かったことを意味します。

    xxx Bytes Available
    残りコンベンショナル メモリ - コンパイラが使用するメモリ
    xxx Bytes Free
    上記の値 - 中間コードを作成するのに必要なメモリ

L2041 stack plus data exceed 64K

リンク時のエラーです。

原因

near メモリに格納されているデータとスタックの合計が 64KB を超えて
しまいました。

回避方法

  1. スタック サイズが減るようにプログラムを調整してください。
  2. 静的配列を動的配列に変更する等、なるべくデータや near メモリを 使用しないようにしてください。
プロパティ

文書番号:410519 - 最終更新日: 2005/08/25 - リビジョン: 1

フィードバック