contributed by < ChingChieh
>
sysprog2018
因為 q_insert_tail 和 q_size 要達到 所以需要額外記住 queue size 和 tail 位子
要記得先free(q->head->value)再free(q->head)
因為我一開始就沒有用strdup的方式複製字串,所以沒遇到free(q->head->value)會錯誤的問題
要記得malloc的時候要多給他一個 char 的空間存 '\0'
malloc()
兩次,如果回傳結果是 NULL 就 return false,但在第二次檢查的時候忘記把第一次 malloc()
的空間 free 掉用有沒有 define INTERNAL 來判斷是否使用自定義的malloc和free
在 harrness.h 裡面有
帶表如果有先定義INTERNAL就不會把 malloc、free 改成 test_malloc、test_free
test_malloc 程式碼:
每次呼叫test_malloc(size)分配的空間:
test_malloc return 的是指向size起始address的pointer:
這裡用到的技巧是arrays of length zero,通常是用在struct的最後一個element,這樣的好處是可以把payload當成block_ele_t後面記憶體位址的開頭
此外再用find_footer()定出size結尾的記憶體位址,然後把後面那塊sizeof(size_t)記憶體的值改成MAGICFOOTER
加上之前把magic_header的值設成MAGICHEADER,所以使用者能合法使用的空間就像被兩塊記憶體空間夾在中間,使用超出size的空間就會改到MAGICFOOTER或MAGICHEADER因此可以在test_free時被偵測出來