記憶體溢位的問題

這兩天發生差點就完蛋的bug
主要是因為記憶體溢位導致重要變數被改寫
因此造成系統無法開機的現象
其實這是之前就存在的程式裡的bug
但是剛好記憶體沒有覆蓋到其他重要的部分
這次修改開機程式時就不幸地(也可以說很幸運地)壓到某個重要變數
還好測試單位有試出來

解決方法主要是參考這篇
http://sholfen.pixnet.net/blog/post/43440068-%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%8E%A9%E7%B7%A9%E8%A1%9D%E5%8D%80%E6%BA%A2%E4%BD%8D%E5%B0%B1%E4%B8%8A%E6%89%8B
回頭我再檢視自己宣告的陣列長度時
果然發現我的char array在承接string時
少考慮了結束字元的長度
因此將原先array長度+1便解決了這個bug

這也是個很好的學習機會
記憶體溢位問題有時不好抓,尤其在沒辦法單步執行與觀察記憶體變化的機器上
還好這次很快地找到問題點
下次要特別注意陣列長度,免得再次發生記憶體溢位的問題

留言

這個網誌中的熱門文章

在嵌入式linux系統中使用android adbd,PC可直接透過USB對console下指令

lighttpd + fcgi + C language to do file upload & download

linux fuse-exfat於嵌入式系統的設定