Contributed by <aben20807
>
sysprog2018
專案連結,已達到 100/100
q_insert_tail()
、q_size()
需要 q_new()
q
malloc()
後必須不是 NULL
才有 head
成員可以被指向malloc()
成功與否都要回傳 (失敗回傳 NULL
)q != NULL
時再去對成員初始化trace-10-malloc 7/7
malloc
失敗時,必須要有對應的處理方式false
false
goto
來做流程控制head
、tail
指向同一個元素,因為該元素是第一個也是最後一個tail == NULL
的情況,因為是單向 linked list 所以一定要透過 tail->next
來插入尾端strlen()
的計算是不包含 '\0'
strlen("abcd")
是 4bool q_remove_head(queue_t *q, char *sp, size_t bufsize)
若 sp
不為 NULL
就要複製 bufsize - 1
個字元並在最後加上一個 '\0'
strncpy()
的危險性strncpy()
不會自動在複製完後加上 '\0'
char *strncpy(char *dest, const char *src, size_t n);
:從 src
複製 n
個字元到 dest
'\0'
結尾
malloc
不保證回傳的記憶體區塊會清空,而這次作業也有出現相關的測試下方討論strncpy(sp, rm->value, bufsize - 1);
會因為沒有 '\0'
結尾就印出一堆奇怪的東西'\0'
snprintf()
int snprintf(char *str, size_t size, const char *format, ...);
'\0'
結束
free(NULL);
free
不是系統的,所以對 NULL
free 會發生錯誤![link]malloc()
INTERNAL
[link] 是用來隔離呼叫 malloc()
的行為INTERNAL
的地方是使用 glibc 提供的 mallocmalloc
原本就不保證回傳區塊會是空的,只有 calloc
保證malloc
會初始化成非空 [link]
scripts/driver.py
$ make test
會去執行 scripts/driver.py
scripts/driver.py -v [0-3]
可以改變輸出的訊息量subprocess
來執行 /traces 中的 .cmd 檔案 [link],可解讀成$./qtest
level 會是 4 所以在輸入指令時可以看到 queue 中間的內容harness
malloc
與 free
qtest
cmd_list
記錄指令以及對應的 callback 函式 [link],結構如下:
param_list
console
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
[!] cppcheck not installed. Unable to perform static analysis.
$ sudo apt install cppcheck