プチコン3号 SmileBASIC コミュニティトピックエミュー negitoro00182015/09/14 18:50:01質問スタックオーバーフロー回避方法教えてください0そうだね 11返信プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿Hanzo rzsense2015/9/14 19:05FOR~NEXT、WHILE~WEND、REPEAT~UNTILなどのループから、正規の終了条件以外の理由で抜ける場合は、GOTOではなくBREAKを使いましょう。0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿エミュー negitoro00182015/9/14 19:21サブルーチンかDEFを使った関数で エラーが起こった場合にはどうすれば いいでしょうか?0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿エミュー negitoro00182015/9/14 19:31参考画像を作りました0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿myu314 myu3142015/9/14 19:34スタックオーバーフローの回避方法は、アルゴリズムを見直してスタックをあまり使わないようにするか、 スタック部分を自分で書いて再帰を展開することじゃないですかね。 >Hanzoさん それらの命令はスタック使われて無いですよ。 プチコン3号ではGOSUBと関数のみだったような(見落としありそう) 多重ループから抜ける構文用意されてないし、ループ抜けGOTOについては読みやすさ考慮しつつ使ってOKかと思います。 0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿otta777 otta777a2015/9/14 19:47GOSUBでサブルーチンを呼び出した場合はRETURNで 戻って下さい。GOTOでメインルーチンに戻ると GOSUBで呼び出した場所をどんどんスタックに記録して Stack overflowとなります。 0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿あまさと しおん ShionAmasato2015/9/14 19:48スタック使ってないんじゃないくて対策が講じられてるだけなきが… まあ実用上同じだけどね0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿otta777 otta777a2015/9/14 19:49もしサブルーチンの中でメインルーチンに戻りたい場合は 下記の様な方法が考えられます。 @MAIN GOSUB @SUB IF FLAG==TRUE THEN GOTO @MAIN 処理1 GOTO @MAIN @SUB 処理2 IF メインルーチンに戻る条件 THEN FLAG=TRUE:RETURN 処理3 RETURN0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿myu314 myu3142015/9/14 19:59エミューさんの参考画像見ましたけど、これ弄ってるうちに治っちゃってるように見えます。 多分otta777さんの書かれてるRETURN忘れが原因だったんでしょうね:)0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿Hanzo rzsense2015/9/14 20:10>miu314さん そうなんですか?知りませんでした。 ご教示ありがとうございます。 >エミューさん 参考画像を拝見しました。 ・19行目「DIM FX,FY,SFX,SFY」は不要だと思います。 ・逆に、20行目のDEFの次の行に、「DIM FILLX,FILLY」がある方がよいかと。 ・23行目は「GFILL SFX,SFY,FILLX,FILLY・・・」では? ・配列SX[],SY[]はどこかで定義していますか?0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿otta777 otta777a2015/9/14 20:24参考画像はStack overflowが出るプログラムでは無いよう ですがStack overflowが出ているプログラムで次のことを チェックされてはいかがですか? GOSUBでサブルーチンを呼び出している部分を書き出して そのサブルーチンの中でGOTOでメインルーチンに戻る 事が無いかチェックしてみて下さい。 サブルーチンの最後にRETURNが記述されていても 特定の条件が成立したときにGOTOでジャンプしている 場合はRETURNせずにメインルーチンに戻っている場合が 考えられます。0そうだね プレイ済み2017/11/03 18:48:37に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿エミュー negitoro00182015/9/14 20:48プログラムを見直したところ、 メインループの終わりが GOTOじゃなくてGOSUBになっていました。(ただのタイプミス) 質問回答ありがとうございました0そうだね プレイ済み2017/11/03 18:48:37に取得