急! 有關pascal error

2007-08-21 11:43 pm
我依家整緊coursework
但唔知點解成日都出現Error 202: Stack overflow error
我之前做pascal從未見過有e種error
因為依種error
我依家run唔到個program
一run到read text file的procedure
個program就會彈出Error字句
成個program亦run唔到落去,,,,,,
請問依種到底係d咩error?
有咩方法可以解決?

回答 (2)

2007-08-22 10:42 pm
✔ 最佳答案




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”。 
參考: 個人經驗
2007-08-22 2:02 am
你介意將個 program source code post 出o黎o麻?
好可能係因為你o的 code 有問題, 令到 memory stack overflow
eg. non-stop looping


收錄日期: 2021-04-13 13:02:22
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070821000051KK04058

檢視 Wayback Machine 備份