SRC質問掲示板Mk2
(現在 過去ログ113 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■20110 / inTopicNo.1)  エラー「サブルーチンの呼び出し階層が50を超えて〜」
  
□投稿者/ jam -(2007/07/03(Tue) 11:10:06) [ID:cYSkfGMh]
    タイトルの通りです。

    現状、なにがエラーの原因なのかもわからないほど漠然としすぎていて、具体的な質問ができていないことをお許しください。

    現在唯一分かっているのは、問題となっているのは一つのインクルードファイルである可能性がある、ということでしかないのです。

    そのファイルをインターミッションコマンドで呼び出したのは良いのですが、インターミッションで実行した後、コマンドを終了して元のインターミッション画面に戻る時に、「エラー〜サブルーチンの呼び出し階層が〜〜〜」というエラーが発生し、その後、もう一つのインターミッションコマンドの「ユニットステータス」が正常に機能しなくなる、というバグでした。

    問題となったインターミッションコマンド自体は、その後も同じように動作できています。
    ユニットステータスの方は、既に以前調整しておいた物ですので、こちらに問題があるとも考えにくく、件のインクルードを、最低限動作テストが可能なレベルまでに削りまくって実行してみたのですが、状況は一向に変わりません。

    そこで、なにがエラーの原因となっているかを少しでも特定したいので、非常に初心者的な質問で申し訳ありませんが、この「サブルーチンの呼び出し階層が50を超えている」とは、一体どのようなことなのでしょうか?
    そうなるとどのような不具合が生じ、またそれは一般的にどのような原因で起きるものであり、そして解決するためにはどういう部分を確認すれば良いのでしょうか?

    プログラムに詳しい方、ご助言をお願いいたしますm(_ _)m
引用返信/返信 削除キー/
■20111 / inTopicNo.2)  Re[1]: エラー「サブルーチンの呼び出し階層が50を超えて〜」
□投稿者/ あかんべえ -(2007/07/03(Tue) 19:33:04) [ID:KBNy1M41]
     たった今、Wiki の「その他よくある質問」の子ページとして、エラーメッセージ別対策ページを作りました。ご質問のメッセージは、「サブルーチン関係のエラーメッセージ」の項目に載せています。
     それで解決できない/納得できない場合は、イベントファイルの関連する部分など、より詳しい情報をお知らせください。

引用返信/返信 削除キー/
■20113 / inTopicNo.3)  Re[1]: エラー「サブルーチンの呼び出し階層が50を超えて〜」
□投稿者/ Mr.tonkati -(2007/07/04(Wed) 21:03:07) [ID:aOpug2TW]
    2007/07/04(Wed) 21:06:12 編集(投稿者)
    2007/07/04(Wed) 21:04:06 編集(投稿者)

    初めまして、こんばんは。Mr.tonkatiなるものです。
    プログラムには詳しくありませんが、思うところを述べます。
    なお、先にあかんべえ様の紹介のあったwikiと被る点と、ニュアンスが異なる点があることをご了承下さいませ。


    No20110に返信(jamさんの記事)
    >
    > (中略)
    >
    > そこで、なにがエラーの原因となっているかを少しでも特定したいので、非常に初心者的な質問で申し訳ありませんが、この「サブルーチンの呼び出し階層が50を超えている」とは、一体どのようなことなのでしょうか?
    > そうなるとどのような不具合が生じ、またそれは一般的にどのような原因で起きるものであり、そして解決するためにはどういう部分を確認すれば良いのでしょうか?
    >
    > プログラムに詳しい方、ご助言をお願いいたしますm(_ _)m


    まず、「サブルーチンの呼び出し階層が50を超えている」というメッセージは、


    ###

    アヒル:
    Incr i

    Talk
    グワ×$(i)
    End

    マップコマンド 50回:

    アヒル

    Exit

    ###


    上記のイベントで簡単に拝めます。
    実行してみれば、"アヒル"というイベントが51回呼び出された瞬間で、件のエラーメッセージが出るのを確認できます。


    これは何をしているのかというと、


    1、マップコマンド"50回"を実行
    2、サブルーチン"アヒル"を実行
    3、変数iを1増やしてTalkコマンド実行
    4、そのサブルーチン内にてまたサブルーチン"アヒル"を実行(2に戻る)*
    ……(2〜4の工程を繰り返す)


    (*4の工程のように関数の処理の中で同じ関数を呼び出すアルゴリズムを「再帰呼び出し」といいます。)


    という具合にサブルーチンの中でサブルーチンを延々と呼び続けているわけです。
    上記のソースのように永遠に処理が完了しない状態を無限ループと呼びます。
    (因みに"End"と"マップコマンド 50回:"の間の行に"Return"を挟むと無限ループ状態を解消できます)


    ところが、このエラーメッセージによって50回目(51回目に呼び出した瞬間)で処理がストップしました。
    このことから、このエラーメッセージは、「無限ループ」を抑止するために仕組まれたものである、と考えて良いと思います。


    起こりうる不具合に関しては端折ります。
    単純に、


    無限ループ→オーバーフロー→OS(ウィンドウズ)、実行中のプログラム(常駐ソフト等)が壊れる?


    SRCと関係ないものにも影響出るかも、というところでしょうか。
    (詳しくは、プログラミングの入門書などで、基本情報処理・セキュリティ関連の知識を身につけて下さいませ)


    原因は上のソースをご覧になってご理解いただけたことと思います。


    解決するために確認する部分は、


    A、Returnのつけ忘れはないか
    B、再帰処理でしくじってないか
    C、関数・イベントコマンドの使用方の確認
    D、その他


    というところでしょうか。


    的外れであれば、失礼しました。
引用返信/返信 削除キー/
■20123 / inTopicNo.4)  Re[1]: エラー「サブルーチンの呼び出し階層が50を超えて〜」
□投稿者/ jam -(2007/07/09(Mon) 17:06:41) [ID:cYSkfGMh]
    お二方、詳細な解説、本当にありがとうございます。

    解決いたしましたので、報告させていただきたいと思います。

    ……まぁ、結論から言えば、

    「エピローグイベント」内でContinueを使用してしまったために、「無限ループ」に突入してしまった、ということです。

    それでは、お騒がせいたしました。
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -