![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 疑難雜症區
(https://www.pcdvd.com.tw/forumdisplay.php?f=34)
- - 記憶體錯誤導致程式結果出錯
(https://www.pcdvd.com.tw/showthread.php?t=1108861)
|
|---|
記憶體錯誤導致程式結果出錯
想請問各位有在寫程式的前輩不知道有沒有碰像這類因記憶體有問題, 而導致結果錯誤的情況
我是用shell寫的,情況是在同樣參數指令,出錯時每次都停在不同地方,像是欄位原本是數值但錯誤時多了幾個字母變成字串的情況 但只要再重複幾次同樣的指令就可以順利執行 像這種情況只能換記憶體了嗎? 有碰過類似經驗的前輩可否分享類似經驗跟其他的解決方案 謝謝 我算新手,不然知道有沒有哪種語言對於這種錯誤能夠有效控制的? |
Shell...
不知道你Shell script是做了啥事,抓了啥資料 搞不好根本就抓錯東西 有效控制?那就catch error還是檢查值,東西也許有問題造成的話,變因要先減少才能抓 別到時根本慰錯資料寫錯script就怪記憶體... |
謝謝您的意見哦
所有的變數都來自參數及輸入的資料且都是固定形式的,也沒有任何來自像時間這種隨時在變的變數 這樣情況下,跑同樣指令參數,也沒改code,有時跑成功,有時沒有,這樣不會是給錯資料吧 而且我也換到有ECC RAM的電腦跑就沒有出現上面的問題 所以我才認為記憶體有問題所造成 |
引用:
一般這種情況首先要懷疑的是自己的code, 可能你的 source code 就出了問題, 例如 記憶體 overflow 之類的, 而不是懷疑硬體, 這機率比起你的code有問題實在低的多. 致於換了 EEC RAM 的電腦就正常, 這可能只是運氣, 因為此台電腦的 OS與記憶體的 configure 都不同, 可能是有問題的code 沒覆蓋到重要的地方, 這種像現在軟體界是常見的. |
這種情況,你可以先換你懷疑的記憶體,或是換台電腦執行..
但情況應該不會改變...(照樣出包..) 很有可能你的CODE 出問題,只是你不知道而已 ,找找看,指標... 未正確宣告存取大小(範圍), 是不是你有執行類似 存取記憶體區塊,打包,解包的動作..?? 自己曾發生過類似問題..情況跟你的一樣 就是打包資料存入,解出來的不是先前存入資料. 後來才知道,方法用錯了..@@ Sample code : Pascal e.g. ----打包--- Ts.AddObject('1',@sendrc); // 存入結構 --讀取--- rcvrc :=Prc100item(ts.Objects[0])^; //讀取訊息 你參考看看 |
我的做東西很簡單
只是用awk重複輸出同一筆資料,然後跟另一個檔案paste在一起而己 但awk重複輸出的那N筆資料就有幾行是不是重複的資料 ram最多才用8mb我想不會是ram overflow吧 |
先debug吧,跟RAM的關聯性小到想哭
|
引用:
你這台電腦可以正常執行一般工作嗎? 如果平常都可以正常使用, 那可以確定的說記憶體出問題的機會小的可以忽略. 因為你隨便執行個自己的小程式就記憶體出錯, 那怎麼可能跑一個複雜作業系統還能正常的運作. |
懷疑硬體,換台機器是不就知道了!
軟體要去包容硬體錯誤,是本末倒置的做法... |
multi thread/process 的問題?
請不要共用同一個記憶體區塊。 |
| 所有的時間均為GMT +8。 現在的時間是02:36 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。