作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] 關於 max recursion depth = 1024
時間Sat Apr 11 00:08:01 2009
※ 引述《goodword (佳話)》之銘言:
: 如題
: 若 file1 內有一行恰好就叫做 do file1
: 那麼 mcalc> do file1 便應該會使程式陷入無窮迴圈
: 所以老師要我們限制 max recursion depth = 1024
: 可是我拿 modCalc.ref 測試的結果仍是會 程式記憶體區段錯誤 crash了
: 當然我也是有限制 recursion depth = 1024 但也是 程式記憶體區段錯誤
: 所以我檢查過後發現 _dofileStack.size() 等於511時便已經crash了
: 所以我把 recursion depth 改小一些 (我改成限制在500)
: 結果程式便真的停在 _dofileStack.size() 等於500的時候
: 然後我用 exit(1); 結束程式 ←這兒是這樣做嗎 還是還要pop出所存的指令??
: 而我想1024不行的原因會不會是 ccws* 的記憶體不大?
: 不夠放這麼多 _dofileStack?
: 很多問題 麻煩老師了
: 謝謝老師
這其實是 ref program 的一個 bug...
原因是出在 MAX_HISTORY 被定義成 1024,
所以當 recursive 呼叫時會使得 _historySize > 1024 所以會 crash...
這個目前沒有簡單的 fix, 除非我們的 _history[] 可以 wrap-around...
不過有一個簡單的 work around, 就是將 MAX_HISTORY 設大一點, 比方說 65536,
那麼只要 dofile1 的內容不要太多, 加起來不要超過 65536 個指令,
應該就不會 crash...
先這樣, 等我有空在好好修一下.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.46.66