contributed by < ccs100203
>
linux2021
詳細閱讀 C Programming Lab ,依據指示著手修改 queue.[ch] 和連帶的檔案,測試後用 Git 管理各項修改,記得也該實作 q_sort 函式。
檢查 malloc 是否正常運作
要記得先清掉 value
一開始在檢查 malloc 時沒有 free(newh)
,導致 make test
時有記憶體未釋放,然後沒有做 memset
的話,會遇到 char* 裡頭塞了怪怪的東西,所以後來就先把他清空了。
跟 insert head 滿像的
照著註解的方式去做,一開始 q->size
忘記扣,導致 size 錯誤
確認是否為 NULL queue
用了 prev
curr
next
三個指標去紀錄目前反轉的位置,一路從頭做到尾
探索是否有其他作法
TODO
參照 Linkd List Sort 的 merge sort
做更改,起初使用遞迴版本時遇到 stack 爆掉的問題,後來用 iterate 的版本時遇到了不能 malloc
的問題,於是又更改了一下寫法才能通過。
在舊版的寫法中,會遇到一開始 head
不知道要放什麼,所以需要在 5~13 行去提前判斷 head
應該要放什麼,在新版中改為用一個 pointer to pointer tmp
去指著 head
,就可以在做 while 時把 node 直接放進 tmp
並同時把第一個 node 給 head
,隨後只需要把 tmp
一直往後接就可以把 list 串起來。
一開始忘記 update q->tail 導致錯誤
寫 q_free
時,沒注意到 value 的釋放而導致錯誤,這邊試試看沒有釋放 value,明顯看出在最後的差別
Measure execution time
post-processing
dudect
相關
constant.c
的 measure
test_size
與 test_insert_tail
兩個 mode,測試是不是 O(1)insert_head
放入 get_random_string
得到的隨機 string,之後做 test 時會前後 call cpucycles
放入 after_ticks
跟 before_ticks
,之後相減就可以得到 cycle 數量fixture.c
: 判斷是否在誤差範圍內test_tries
代表整體測試的次數2021/02/24
在 cppcheck 2.3 dev 會遇到 unmatchedSuppression 的問題,
無法解讀 pre-commit.hook 內 suppresses 新增的 nullPointerRedundantCheck,
我將 cppcheck 的版本降為 1.9 後解決此問題。
提交 pull request 來改進 Cppcheck 相關操作?
jserv