コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
ドラキーマカレー ◆3jIC4XsSXrZX
2020/4/26 23:09
質問
何があふれたの?
「スタックがあふれる」の「スタック」って何ですか?

コメント

アバター
うょリウム(元 SPDX) 2020/4/27 0:14 ◆UTOEg1c1vr.B
えーっと、GOSUB連打とかでしたっけ…?
アバター
ドラキーマカレー 2020/4/27 0:38 ◆3jIC4XsSXrZX
A

DEF A
A
END
しました
アバター
うょリウム(元 SPDX) 2020/4/27 2:24 ◆UTOEg1c1vr.B
無限ループでスタックというやつをあふれさせたのですね。

DEF A
A(Aを実行、ENDでここに戻る予定)

→DEF A
A(Aを実行、ENDでここに戻る予定)

→DEF A
A(Aを実行、ENDでここに戻る予定)

その「予定」を覚えきれなくなったわけです。

OPTION STRICT
VAR A,B
DEF A
INC B
A
END

(エラー後)
?B

これで容量が見られるです。
※プログラムは3号のものです。
アバター
Na 2020/4/27 9:32 ◆QoELVrBXBQCI
個人的には「Stack underflow」はどうしたら発生するのか気になります。
アバター
こういち 2020/4/27 10:01 ◆ou0jbJnEJ0Kb
スタックについてちょっと補足
スタックは積み上げるとかそんな意味があったりします。
例えば、積み上げられた本から一冊取り出すとき、最も最近積んだ本から取り出しますよね。
そんな感じで、データを追加したり、最も最近追加したデータを取り出したりできるデータ構造をスタックと言います。
このスタックがサブルーチンと相性が良いのです。
何故なら、サブルーチンから戻るときは、最も最近呼び出されたサブルーチンに戻るからです。

逆に取り出すとき最も昔に追加されたデータを取り出すデータ構造もあって、キューと呼ばれています。こっちは行列に並ぶ人間に例えられます。迷路を解くときなどに使えます。
アバター
ツララ 2020/4/27 10:45 ◆ArUdBYOYME1V
配列の要素数操作関係の命令で、PUSHやPOP()やUNSHIFTやSHIFT()とかありますけど
スタックはDEF~ENDやGOSUB~RETURNとか、他の処理に飛んだあと戻って来る処理で
戻り先の場所を一時的に覚えておくための配列みたいなもんかと。
メモリの都合で配列や変数を無制限に作れないのと同じで
スタックも数が増えすぎるとエラーが出る限界があるってことですな。
戻り先場所の配列と一緒に戻り先のデータの配列も作っておけば
ソートしたりして色々応用ができるってことですか。
シリアル番号の配列も一緒に作っておけば、ソートした状態で要素数操作した後にソート前の状態に復帰もできるし。
アバター
さすらいの名無し 2020/4/27 11:50 ◆LWMA5UzCJb3e
イメージ的にはこんな感じ?
アバター
Na 2020/4/27 12:05 ◆QoELVrBXBQCI
こういう例でも起こります
@MAINLOOP
(省略)
GOSUB @YAMERU 'やめるボタンの処理
(省略)
GOTO @MAINLOOP

@YAMERU
IF (やめるボタンが押された) THEN GOTO @GAMEEND 'もう戻ってこない
RETURN

なのでおもちSPでやめるボタンを65535回くらい押せばStack overflowになると思います。
アバター
うょリウム(元 SPDX) 2020/4/29 18:01 ◆UTOEg1c1vr.B
「これやって。急いでないけど大事なことだからね。」

「今やってることは急いでないんでしょ?
一旦中断して先にこっちをやって欲しいな。
終わってからその続きをやって」

「はい手を止めてコレ最優先で頼むよ。ソレはコレが終わってからやってね。」

「コレは一刻の猶予もない仕事なんだ。そんなこと後にして、真っ先にやってくれ!」

「緊急地震速報だ!何より先に安全を確保しろ!」

「腕にスズメバチが!安全確保より
先に即座に叩き落とさねば!」

あれ?最初に何をやってたんだっけ?
やるべきことの順番は…?
スズメバチを吹っ飛ばしたら何をするんだっけ…?

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -