JavaA2Z

KAB-studio > プログラミング > JavaA2Z > バッファアンダーフローとは

バッファアンダーフロー

日本語 文字配列逆溢れ
英語 buffer underflow
ふりがな ばっふぁあんだーふろー
フリガナ バッファアンダーフロー

解説

文字列を格納する配列の前の位置へと値を格納すること。
文字列を格納する配列を「バッファ」といい、そのサイズを越えた文字列を格納した時に配列の先頭方向に溢れた場合、「オーバーフロー」の逆の「アンダーフロー」したことになるため「バッファアンダーフロー」と呼ばれる。
また、この原因となる「バッファアンダーラン」が同義語として使われることもある。
  
要は、バッファオーバーフローの逆で、文字列の書き込み時に、インデックスナンバーにマイナスの値を使用した場合に発生する。文字列を逆方向からコピーした際に発生しやすい。
バッファオーバーフローと同様、Javaでは通常発生しない。
 
バッファオーバーフローとバッファアンダーフローはほぼ同義語である。違いは、溢れる方向が、バッファオーバーフローはプラス方向、バッファアンダーフローがマイナス方向という違いである。
OSの中には、アドレスの小さい方にプログラムが置かれ、アドレスの大きい方に変数領域が置かれるものがある。その場合、バッファアンダーフローでなければプログラムを書き換えることができないため、この違いが大きな意味を持つ。
 
また、バッファアンダーフローにはCD-RやDVD-Rの書き込み時のエラーや、データをストリーミングで配信する場合のエラーを指す場合がある。
データを、一時格納箇所としての「バッファ」に起き、それを対象に渡すような処理の場合、バッファへの書き込みが、バッファから対象へ渡す速さよりも遅い場合に「バッファのデータが枯渇する」エラーが発生する。
これを、「バッファが枯渇してしまう」ことから、バッファが溢れてしまう「オーバーフロー」の逆として「バッファアンダーフロー」と呼ぶ。
この場合、前述のバッファアンダーフローとは意味が異なるため注意が必要。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // たとえばchar型配列4文字の場合。
        char[] chars = new char[]{ 'あ''い''う''え' };
        System.out.println( chars );

        // この配列の前、つまりインデックスナンバーが
        // マイナスの値でアクセスしようとすることを
        // 「バッファアンダーフロー」と言います。
        try
        {
            chars[-1] = 'ん';
        }
        catch( ArrayIndexOutOfBoundsException e )
        {
            e.printStackTrace();
            // java.lang.ArrayIndexOutOfBoundsException: -1
            //     at Sample.main(Sample.java:15)
        }

        // このように、Javaでは例外が発生します。
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // たとえばchar型配列4文字の場合。
        char[] chars = new char[]{ 'あ', 'い', 'う', 'え' };
        System.out.println( chars );

        // この配列の前、つまりインデックスナンバーが
        // マイナスの値でアクセスしようとすることを
        // 「バッファアンダーフロー」と言います。
        try
        {
            chars[-1] = 'ん';
        }
        catch( ArrayIndexOutOfBoundsException e )
        {
            e.printStackTrace();
            // java.lang.ArrayIndexOutOfBoundsException: -1
            //     at Sample.main(Sample.java:15)
        }

        // このように、Javaでは例外が発生します。
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2005/06/21
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。