星期二, 10月 14, 2014

注意 Allocate memory size 為 0 的地方


今天我們再來談一個記憶體使用上的小問題 (記憶體的問題怎麼這麼多啊~)
就是寫東西在 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

沒有留言: