linux2019
contributed by < ambersun1234
>
q_new
q_free
q_insert_head
ERROR: Freed queue, but 4 blocks are still allocated
的東西。因此我參考了 DyslexiaS 的開發紀錄,將 malloc 替換成 strdup 的方式實做才解決了問題q_insert_tail:
q_insert_tail
要求 ,因此在 queue_t
中新增了 list_ele_t *last
用以紀錄當前 queue 中最後一個元素q_remove_head:
q_size:
int q_size
紀錄了當前 queue 的 element 數量q_reverse:
根據 Makefile 的內容可以得知,自動評分系統是使用了 python 來進行評分的
最主要評分的 function 是 Tracer
裡面的 run
& runTrace
,評分的項目總共有15個,定義於 Tracer
裡面的 traceDict
; 其個別對應到的是 ./traces 的15個指令檔案
在 run
中是先做一些初始化設定,然後接著用一個 for 迴圈跑 traceDict
的 keys,之後在呼叫 runTrace
runTrace
中使用了 subprocess.call
呼叫子行程用以執行各個 traceDict
的檔案,若子行程執行中出錯,則 retcode 就不是0
最後評分是依據 runTrace
的回傳值來判斷要給幾分
maxval 是各個項目的最高分 ( t 為當前 traceDict 的 key )
add_cmd()
儲存到 單向
linked list 裡面,linked list 的設計是為了方便使用者自行增加 function 到互動界面上harness.h
中有寫到
test_malloc
實際上是用一個更大的空間來儲存記憶體相關的東西,而且是使用 雙向 linked list
儲存block_ele_t *new_block = malloc(size + sizeof(block_ele_t) + sizeof(size_t));
magic number
有相關
magic number: 程式設計中將一個數字寫死,用以表達特殊意義
sizeof(size_t)
即是要儲存 magic_footer 的test_malloc
的回傳值是定義成void *p = (void *) &new_block->payload;
struct hack
static size_t allocated_count = 0;
用以紀錄目前 allocated 的記憶體數量