バッファアンダーラン
日本語 | 文字配列逆走り過ぎ |
英語 | buffer underrun |
ふりがな | ばっふぁあんだーらん |
フリガナ | バッファアンダーラン |
文字列を格納する配列の前の位置に文字を書き込もうとすること。
文字列を配列で格納している場合に、インデックスナンバーに負の値を使用してアクセスしようとすること。ArrayIndexOutOfBoundsException例外が投げられる。
文字列の配列を「バッファ」と呼び、その範囲を前の方向に超えるため「バッファアンダーラン」と呼ばれる。
Java以外の言語では、このバッファアンダーランによって「バッファアンダーフロー」が発生させられるため、バッファアンダーフローの原因、もしくは同義語として使われる。
文字列を配列で格納している場合に、インデックスナンバーに負の値を使用してアクセスしようとすること。ArrayIndexOutOfBoundsException例外が投げられる。
文字列の配列を「バッファ」と呼び、その範囲を前の方向に超えるため「バッファアンダーラン」と呼ばれる。
Java以外の言語では、このバッファアンダーランによって「バッファアンダーフロー」が発生させられるため、バッファアンダーフローの原因、もしくは同義語として使われる。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
try
{
// たとえばchar型配列で4文字の場合。
char[] chars = new char[4];
// ここに、1文字ずつ書き込み、サイズを越えて書き込もうと
// することでバッファアンダーランしてみます。
String string = "あいうえお";
// 1文字ずつ逆方向にコピーします。
// 配列のサイズより1文字多いとこがポイント。
for( int iF1 = 0; iF1 < string.length(); ++iF1 )
{
chars[chars.length - 1 - iF1] = string.charAt( iF1 );
}
}
catch( ArrayIndexOutOfBoundsException e )
{
e.printStackTrace();
// java.lang.ArrayIndexOutOfBoundsException: -1
// at Sample.main(Sample.java:19)
}
// このように例外が発生します。
}
}
public class Sample
{
public static void main( String[] args )
{
try
{
// たとえばchar型配列で4文字の場合。
char[] chars = new char[4];
// ここに、1文字ずつ書き込み、サイズを越えて書き込もうと
// することでバッファアンダーランしてみます。
String string = "あいうえお";
// 1文字ずつ逆方向にコピーします。
// 配列のサイズより1文字多いとこがポイント。
for( int iF1 = 0; iF1 < string.length(); ++iF1 )
{
chars[chars.length - 1 - iF1] = string.charAt( iF1 );
}
}
catch( ArrayIndexOutOfBoundsException e )
{
e.printStackTrace();
// java.lang.ArrayIndexOutOfBoundsException: -1
// at Sample.main(Sample.java:19)
}
// このように例外が発生します。
}
}
// Sample.java public class Sample { public static void main( String[] args ) { try { // たとえばchar型配列で4文字の場合。 char[] chars = new char[4]; // ここに、1文字ずつ書き込み、サイズを越えて書き込もうと // することでバッファアンダーランしてみます。 String string = "あいうえお"; // 1文字ずつ逆方向にコピーします。 // 配列のサイズより1文字多いとこがポイント。 for( int iF1 = 0; iF1 < string.length(); ++iF1 ) { chars[chars.length - 1 - iF1] = string.charAt( iF1 ); } } catch( ArrayIndexOutOfBoundsException e ) { e.printStackTrace(); // java.lang.ArrayIndexOutOfBoundsException: -1 // at Sample.main(Sample.java:19) } // このように例外が発生します。 } }