還是卡在同樣的地方,最後還是回頭看了一下 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]
沒有留言:
張貼留言