C語言
contributed by < asd757817
>
github 使用 develop 分支
請補上實驗環境
課程助教
queue_t 中加入 size 儲存 queue 長度
考慮 NULL queue 的情況,在 NULL queue 時直接回傳 0
當創建一個 queue 時把長度設為0
在測試時出現 ERROR: Segmentation fault occurred. You dereferenced a NULL or invalid pointer 的錯誤警告,檢查後發現程式在 malloc failure 時會對 newh、s_cpy 都釋放記憶體,但兩者至少有一個是 NULL 就造成了這個錯誤。
把程式修正成:
修正 queue_t
bool q_insert_tail 大致上內容與 insert_head 相似,只有部份地方需要修改
在 test 時會出現 ERROR: Segmentation fault occurred. You dereferenced a NULL or invalid pointer
檢查後發現是判斷 newh、s_cpy 在釋放記憶體時出錯,原本是只要其中一個為 NULL 就釋放記憶體並回傳 false,但這樣當會對 NULL 的部份也進行一次 free ,應該改為其中一個為 NULL而另一個不為 NULL 的情況釋出不為 NULL 的記憶體才對
修改後的為
所有配置過的空間有:
在 make test 時一直出現錯誤訊息,目前已知是strncpu
出現問題,但仍在處理中。
仔細重新閱讀了題目
If sp is non-NULL and an element is removed, copy the removed string to *sp
(up to a maximum of bufsize-1 characters, plus a null terminator.)
真正要取的字串長度是bufsize-1,最後一位要補成結尾符號('\0'),而 strncpy 只是將長度 n 的字串複製到目標中,並沒有加入結尾符號,因此我的作法:
修改後的 q_remove_head 如下:
題目要求:
以這次作業的 makefile 為例子:
是一個在執行 commit 或是 merge 指令時會觸發的一個腳本,又可以分成 pre-hook 或是 post-hook,一個是在指令輸入後執行前觸發;一個是在指令執行完畢後觸發。
這一次作業使用的是 pre-hook,當我們要進行提交的時候會觸發腳本,檢查這次提交之前是不是有執行過 clang-format 的排版檢查,而這次作業會使用的 clang-format、cppcheck 在腳本內也會檢查是否安裝,若是未安裝會以文字警告尚未安裝。
調整 C 語言的原始碼的格式,以方便開發人員閱讀,由於不同的開發人員有不同的習慣,在團隊開發時為了使團隊間的溝通順利,可以利用 clang-format 調整程式碼的格式,原本套件就有預設Google、Chromium、Mozilla 等程式,開發人員也可以自行定義團隊的開發格式。
實際操作:
clang-format -i target.c
-i 參數會抓當前目錄底下的格式檔進行調整。
一個靜態分析的工具,不用實際運行程式只透過原始碼分析找出程式的問題,所找的問題類型是編譯器難以察覺的。
檢查項目包括:
在這次的作業中使用 cppcheck 檢查動態配置的記憶體是否有正確釋放、程式是否操作 null pointer 等,檢查可以編譯執行但卻有疑慮的問題。
make test
可以測試程式並計算分數。在 Makefile 中得知這行指令會運行 driver.py 檔案。