今天我們再來談一個記憶體使用上的小問題 (記憶體的問題怎麼這麼多啊~)
就是寫東西在 NULL pointer 上
你一定會覺得很奇怪
是甚麼樣白爛的programmer 會在 NULL point 上面寫資料 ?
其中一種情況還蠻常見的
就是 Allocate size 為 0 的 memory
在這種情況下
系統會回覆一個 NULL pointer ,
此時拿來這個 pointer 來做任何處理會很容易出錯. (通常是當機啦!)
底下是一個範例
pName = os_malloc_b(0); /* pName is NULL pointer */
當然大多數的 programmer 不會犯這麼明顯的錯誤 (只要你面試的技巧沒有問題)
通常比較會發生的地方是 allocate 的 size 本身不明顯或是變動的
例如開啟一個size 為 0 的檔案. (沒有想到吧 !)
ret = fs_file_info(info);
pBuf = os_malloc_b(info.size); /* info.size is 0 */
ret = fs_file_read(pBuf , ...); /* Exception */
解決的方法不外乎有兩種
1. 檢查 allocate 的 size
2. 檢查 pointer 是否為 NULL
沒有留言:
張貼留言