C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■85145 / 15階層)  C# MVC でのスタックオーバーフロー
□投稿者/ とっちゃん (461回)-(2017/09/13(Wed) 13:18:03)
No85143 (はな さん) に返信
> 回答ありがとうございます。
>
> 計算式が長いとスタックオーバーフローが発生してしまうのかもしれません。
>
> double A1() {return B1() == 0 ? 0 : (C1() + func2(func1(D1(), AD5()), A2())) / B1()};
> double A2() {return B2() == 0 ? 0 : (C2() + func2(func1(D2(), AD5()), A3())) / B2()};
> double A3() {return B3() == 0 ? 0 : (C3() + func2(func1(D3(), AD5()), A4())) / B3()};
> ・・・
>
> 計算式をユーザが変更できる仕様のため、再起呼び出しをやめることができないのです。
> ローカル変数にばかり気をとられていましたが、関数の戻り値を変数に代入していなくてもスタック対象なのかもしれません。
>

計算式なるものがどのようなものなのか、それがどういう風にプログラムに作用するのかなどはわかりませんが
現在の状況だと、どれだけスタックエリアを膨大にしてもユーザーが計算式を長くしたら(スタックをより消費するような計算式にしたら)、
スタックオーバーフローが発生してしまうのではありませんか?

外部データに依存するということは、今エラーになる外部データで対処療法的な回避を行っても
ほかのデータにしたら同じエラーが発生してしまう可能性を含んでいるということを意味します。

根本的な対策をとらない限り、エラーが出たらスタックを拡張し。。。ということを繰り返すことになります。
仮にそのような回避策が可能であったとしてもそれはスタックサイズが確保可能な上限に来た時点で破綻してしまうことになり
どこかで根本的な対応をとらない限り解決することはないのではありませんか?

再帰呼び出しをやめることができないのは再帰することを前提としたアルゴリズムだからですよね?
どのようなプログラムコードかわからないので、再帰しないアルゴリズムに変更できるものかどうかについてはわかりません。

ですが、再帰するとだめであるということがわかっている以上それ以外の解決策を模索するしかないので
再帰しない形にアルゴリズムを改める必要があると思います。

編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[14]: C# MVC でのスタックオーバーフロー /はな →Re[16]: C# MVC でのスタックオーバーフロー /はな
 
上記関連ツリー

C# MVC でのスタックオーバーフロー / はな (17/09/06(Wed) 15:56) #85038
Re[1]: C# MVC でのスタックオーバーフロー / WebSurfer (17/09/06(Wed) 16:43) #85040
  └ Re[2]: C# MVC でのスタックオーバーフロー / はな (17/09/06(Wed) 17:22) #85041
    ├ Re[3]: C# MVC でのスタックオーバーフロー / ぶなっぷ (17/09/06(Wed) 18:25) #85042
    └ Re[3]: C# MVC でのスタックオーバーフロー / WebSurfer (17/09/06(Wed) 19:21) #85043
      └ Re[4]: C# MVC でのスタックオーバーフロー / はな (17/09/07(Thu) 11:02) #85048 解決済み
        └ Re[5]: C# MVC でのスタックオーバーフロー / なちゃ (17/09/07(Thu) 12:00) #85049 解決済み
          └ Re[6]: C# MVC でのスタックオーバーフロー / なちゃ (17/09/07(Thu) 12:04) #85050 解決済み
            └ Re[7]: C# MVC でのスタックオーバーフロー / はな (17/09/07(Thu) 15:39) #85052
              ├ Re[8]: C# MVC でのスタックオーバーフロー / ぶなっぷ (17/09/07(Thu) 15:49) #85053
              └ Re[8]: C# MVC でのスタックオーバーフロー / 魔界の仮面弁士 (17/09/07(Thu) 16:27) #85054
                └ Re[9]: C# MVC でのスタックオーバーフロー / はな (17/09/07(Thu) 17:23) #85055
                  ├ Re[10]: C# MVC でのスタックオーバーフロー / 魔界の仮面弁士 (17/09/07(Thu) 18:18) #85057
                  └ Re[10]: C# MVC でのスタックオーバーフロー / WebSurfer (17/09/07(Thu) 18:09) #85056
                    └ Re[11]: C# MVC でのスタックオーバーフロー / はな (17/09/11(Mon) 12:45) #85095
                      └ Re[12]: C# MVC でのスタックオーバーフロー / とっちゃん (17/09/11(Mon) 17:07) #85106
                        ├ Re[13]: C# MVC でのスタックオーバーフロー / はな (17/09/11(Mon) 21:14) #85111
                        │└ Re[14]: C# MVC でのスタックオーバーフロー / Azulean (17/09/11(Mon) 21:37) #85112
                        │  └ Re[15]: C# MVC でのスタックオーバーフロー / とっちゃん (17/09/12(Tue) 11:31) #85127
                        └ Re[13]: C# MVC でのスタックオーバーフロー / Jitta (17/09/12(Tue) 22:20) #85140
                          └ Re[14]: C# MVC でのスタックオーバーフロー / はな (17/09/13(Wed) 11:20) #85143
                            ├ C# MVC でのスタックオーバーフロー / とっちゃん (17/09/13(Wed) 13:18) #85145 ←Now
                            │└ Re[16]: C# MVC でのスタックオーバーフロー / はな (17/09/13(Wed) 15:24) #85146
                            └ Re[15]: C# MVC でのスタックオーバーフロー / とっちゃん (17/09/13(Wed) 16:29) #85147

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信