contributed by < EdwardCKC
>
說好的進度呢?
q_insert_head
& q_insert_tail
一開始如下:
malloc
的 + 1 是要補 \0
在 string 的尾端 ,不然會有 overflow 的問題
之後發現 free()
不能釋放不是malloc()
/ calloc()
的記憶體空間
改進漢語表達。
為了加強自己對指標的了解,把 element_t *value
和 *s
印了出來
結果發現:
我錯誤以為 strncopy()
是在複製 pointer s 指向數值的地址去 pointer value,所以根本不用 free(s)
/ s=NULL
去節省記憶體空間或防止更改 s 會改到 value 的值
從 C99 7.21.2.4 The strncpy function 和 man page 可以得知 strncpy
最後要 +1 的原因
列出 C 語言規格書和 man page 相關描述,向第一手材料學習。
q_remove
& q_remove_tail
remove 只是去掉 node 跟 list 的連結,所以需要 char *sp
去暫存
寫的時侯在list_del
跟 list_del_init
之間在選擇,最後選了 list_del
因為在 if 已經有考慮到 list is empty 的問題,但還是會想會不會像 sql injection 一樣使一個 empty list 可以 by pass 這個條件式,也可能只是因為我還是沒有很懂 C 跟記憶體之間的關係,所以之後還是會去找找看list_del_init
的應用情景
因為這次是 delete 也就是說需要釋放記憶體空間,所以最後會用 q_release_element
原本這樣寫想要節省記憶體空間
最後改成下面,因為這樣可讀性比較高
一開始我是用 list_for_each_safe
作為 loop ,然後把每個 node 移到 head
然後發現第一個node的移動是多餘的
所以改成
但出現以下error
看了 list_move_tail
的 code,發現會 infinite loop
再改成逆序,原本也預期跟上面一樣是 infinite loop
但在編譯時出現以下 error