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.5
- 回答日時:
#3>これをスタックオーバーフローを起こさないようにするためには、
答えの求め方自体に問題があるので、別の方法にするとか
例えばn*(n+1)/2で答えが求められます。
そうではなくて、例外が起こったときにもプログラムが終了しないようにするという意味ならエラーが起こりそうなところをtry{ }で囲み、catch{}で例外発生時の処理をします。
例外が起こったときにもプログラムが終了しないようにするという意味です。
質問があいまいで申し訳ありませんでした。
try{ }
catch{ }
という方法があるということは、非常に勉強になりました。
ありがとうございます。
No.4
- 回答日時:
Javaで書くもっとも簡単な(短い)スタックオーバーフローを起こすものといえばこんな感じでしょう。
永遠に自分を呼びつづけるので一瞬で落ちます。
public class ErrorTest {
public static void main(String[] args) {
main(args);
}
}
No.2
- 回答日時:
メソッドの呼び出しをすると、そのメソッドが終了したら呼び出し元に制御が戻りますよね?
これを実現するため、どこから呼んだのかを記録しておくのがスタックです。
ですから、ものすごくたくさんの回数のメソッドの呼び出しを行えば、スタックに記録しきれなくなりスタックオーバーフローが発生します。
ではどのくらい呼び出せばオーバーフローするかというと、とにかくたくさんで、普通にプログラムを作ったぐらいではオーバーフローはまず起こりません。
あとは自分で考えてみてください。
No.1
- 回答日時:
スタックオーバーフローとはスタック(変数などを格納するメモリ領域)で発生するバッファオーバーフローのことです。
バッファオーバーフローについては参考URLで解説しています。ただJavaではスタックオーバーフローが起こってもStackOverflowError()にスローされるので致命的な事態にはなりません。
Javaでは配列やStringではスタックオーバーフローを起こせません。そこで、再帰関数による無限ループなどを実行することでスタックオーバーフローエラーが起こります。
参考URL:http://e-words.jp/w/E38390E38383E38395E382A1E382 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- IT・エンジニアリング ITエンジニア用の質問サイト 2 2022/05/30 18:05
- 学校 今年大学生になったのですが大学の授業ってどれくらいで慣れますか? ずっとやり方が分からず困っていた履 1 2022/04/05 22:12
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- その他(プログラミング・Web制作) 大学のゼミのレポートがムカつきます。 R言語というデータ分析に特化したプログラム言語を用いた授業の課 1 2023/06/29 00:50
- 子供・未成年 大学の課題が複数あってつらいです 3 2022/11/29 19:03
- その他(悩み相談・人生相談) あくまでも私の考えですが親のエゴで子供って産まれてくるじゃないですか、、 今自分がこの世に存在してい 1 2022/04/25 23:16
- 物理学 物理学 工学 自然科学 4 2023/04/27 10:26
- 地理学 地図の塗り分けについて 1 2022/03/25 18:44
- その他(教育・科学・学問) (大学関係者へ) 大学の学生部屋の使用について 1 2022/08/17 22:38
- 数学 数学の確率で、集合Xを「事象Aが少なくとも2回起こる試行」集合Yを「事象Aが起こるのは2回以下の試行 5 2023/06/19 21:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
0除算の例外処理ができない!!...
-
【JAVA】与えられた金額を貨幣...
-
C#の捕捉されない例外処理の対...
-
数字か文字列かを判定する関数
-
VB.Net Object型 空かどうか
-
文字列からダブルクオートの削除
-
VBA Evaluate関数 型が一致しま...
-
C# UriFormatExceptionの回避
-
WebClient()以外でネットにアク...
-
初回例外
-
WMIスクリプトを使用してMACア...
-
nullで、return出来るのはどん...
-
Timestamp型への変換について(J...
-
時間を表す文字列を時刻に変換
-
改行コード(\\n)を削除したい場合
-
例外処理throws
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
mainメソッドのthrows節で設定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.Net Object型 空かどうか
-
文字列からダブルクオートの削除
-
連続する「\\」をひとつの「\\...
-
例外ってIf文の中に入れますか...
-
nullで、return出来るのはどん...
-
C#の捕捉されない例外処理の対...
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
VBA 400エラー 1004エラー
-
Timestamp型への変換について(J...
-
VC++におけるCStringの変換
-
String型の日付(2005/11/25)の...
-
時間の取得
-
サーブレットからJSPの呼び出し...
-
アロー関数のIE対応にpolyfill...
-
【JAVA】与えられた金額を貨幣...
-
C# UriFormatExceptionの回避
-
WebClient()以外でネットにアク...
-
Excelでのエラー
おすすめ情報