No.1
- 回答日時:
スタックオーバーフローとはスタック(変数などを格納するメモリ領域)で発生するバッファオーバーフローのことです。
バッファオーバーフローについては参考URLで解説しています。ただJavaではスタックオーバーフローが起こってもStackOverflowError()にスローされるので致命的な事態にはなりません。
Javaでは配列やStringではスタックオーバーフローを起こせません。そこで、再帰関数による無限ループなどを実行することでスタックオーバーフローエラーが起こります。
参考URL:http://e-words.jp/w/E38390E38383E38395E382A1E382 …
No.2
- 回答日時:
メソッドの呼び出しをすると、そのメソッドが終了したら呼び出し元に制御が戻りますよね?
これを実現するため、どこから呼んだのかを記録しておくのがスタックです。
ですから、ものすごくたくさんの回数のメソッドの呼び出しを行えば、スタックに記録しきれなくなりスタックオーバーフローが発生します。
ではどのくらい呼び出せばオーバーフローするかというと、とにかくたくさんで、普通にプログラムを作ったぐらいではオーバーフローはまず起こりません。
あとは自分で考えてみてください。
No.3ベストアンサー
- 回答日時:
スタックオーバーフローについては既に説明があるので、
サンプルプログラム
こんな感じでスタックを浪費するプログラムを作ればいいと思います。
sum(n)は、1~nまでの数値を足し込むプログラムですが、9000あたりでスタックオーバーフローします。
sum(10000)は50005000で、単純に計算すれば、intの範囲で計算できます。
------------------------------------------------------------
public class Calc {
static int sum(int n){
if(n>0)
return n+sum(n-1);
else
return 0;
}
static public void main(String[] argc){
System.out.println(sum(10000));
}
}
この回答への補足
これをスタックオーバーフローを起こさないようにするためには、
何か1文加える必要があるのでしょうか?
本当に素人なんで、初歩的な質問ですみません。
No.4
- 回答日時:
Javaで書くもっとも簡単な(短い)スタックオーバーフローを起こすものといえばこんな感じでしょう。
永遠に自分を呼びつづけるので一瞬で落ちます。
public class ErrorTest {
public static void main(String[] args) {
main(args);
}
}
No.5
- 回答日時:
#3>これをスタックオーバーフローを起こさないようにするためには、
答えの求め方自体に問題があるので、別の方法にするとか
例えばn*(n+1)/2で答えが求められます。
そうではなくて、例外が起こったときにもプログラムが終了しないようにするという意味ならエラーが起こりそうなところをtry{ }で囲み、catch{}で例外発生時の処理をします。
例外が起こったときにもプログラムが終了しないようにするという意味です。
質問があいまいで申し訳ありませんでした。
try{ }
catch{ }
という方法があるということは、非常に勉強になりました。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
字面がカッコいい英単語
あなたが思う「字面がカッコいい英単語」を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
eclipseでスタックサイズを変更するには?
Java
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.Net Object型 空かどうか
-
【JAVA】与えられた金額を貨幣...
-
0除算の例外処理ができない!!...
-
javaプログラムで背景色を変更...
-
VB.NETで16進数が正しいかどう...
-
ADOによるレコードの追加/更新
-
Timestamp型への変換について(J...
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
サーブレットからJSPの呼び出し...
-
C#の捕捉されない例外処理の対...
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
配列の重複する値とその個数を...
-
private static という変数の修飾
-
複数の変数を宣言する時、同時...
-
オブジェクト参照がオブジェク...
-
Java初級 引数に適用できません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.NETで16進数が正しいかどう...
-
VB.Net Object型 空かどうか
-
Timestamp型への変換について(J...
-
C#の捕捉されない例外処理の対...
-
時間の取得
-
VBA Evaluate関数 型が一致しま...
-
C# UriFormatExceptionの回避
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
String型の日付(2005/11/25)の...
-
タトゥーや墨を入れる人の共通点
-
VBA 400エラー 1004エラー
-
nullで、return出来るのはどん...
-
VC++におけるCStringの変換
-
例外ってIf文の中に入れますか...
-
【JAVA】与えられた金額を貨幣...
-
全角スペースのチェックについて
-
ファイルダイアログを開いた時...
-
WebClient()以外でネットにアク...
おすすめ情報