2006/09/17

[Diary] 最後還是找到 Bug 了

因為這兩天在做最後一個 parse & merge 的程式,
還是卡在同樣的地方,最後還是回頭看了一下 code,
於是,Bug 就這樣爬出來了 (抖)

說起來還真的滿蠢的,這個 Bug 非常、非常的小,
小到連我自己都訝異居然會犯這種錯.. ||

故事是這樣的..

原 code: realloc(node, newsize);

聰明的小朋友已經看出來了,上面犯了很大的錯誤,
因為 realloc(ptr, size) 其實兼具 malloc(size)free(ptr) 的功能,
當 allocate size = 0 的時候,就做 free 的動作,
而 allocate size > original size 時,就會視狀況擴展現有的區塊,
或是重新 allocate 較大的區塊,並將現有區塊複製過去,
最後再把原區塊 free 掉,並傳回新區塊的位址..

啊! 難怪有時候正常有時候爆炸..

因為它應該要這樣寫啊: node = (node_type)realloc(node, newsize);


就因為這樣,我卡在哪裡好一陣子,
今天睡飽飽醒來,才發現問題原來只有一點點 Orz

這則故事告訴我們:
 1. 程式要睡飽才寫
 2. 寫程式是可以把一個人搞瘋的 (?)

嗯,就是這樣。


[posted by cornguo @ CornGuo's BLOG]

沒有留言: