✔ 最佳答案
stack 是一塊重要的記憶體空間,用以暫存副程序(procedure)或函數(function)的返回位址(return address)、傳遞參數(paramenters)及區域變數(local variables)。
發生 stack overflow 的原因可能是:
區域變數佔用大量記憶體空間,例如:陣列(array)有很多維(dimension)及每一維有大量元素(element)或每個元素佔很大空間
解決方法:
調整編譯器選項,加大stack的空間
在不影響程式邏輯(program logic)的大前題下,把記憶體佔用量大的區域變數重定為全域變數(global variable)
由於Pascal不支援動態陣列(dynamic array),所以一般做法是預大一些,造成浪費,嘗試縮小陣列的規模,減少浪費空間
可考慮用linked list代替陣列,減輕stack的負荷 (linked list用heap來配置記憶體)
傳遞參數給副程序或函數時,参數佔用的記憶體空間太多,例如:以傳值方式(pass by value)傳遞陣列、記錄(record)等變數
解決方法:
調整編譯器選項,加大stack的空間
在不影響程式邏輯的大前題下,改以傳址方式(pass by reference)傳遞陣列、記錄等參數(即冠上var關鍵字(keyword))
副程序或/及函數呼叫太深,例如:遞迴(recursion),即副程序/函數自我呼叫(call)
解決方法:
調整編譯器選項,加大stack的空間
改以 while ... do ... 迴圈代替遞迴
2007-08-22 22:20:13 補充:
勘誤:首段“paramenters”校正為“parameters”。