contributed by < yanjiunhaha
>
lab note
malloc()
和 free()
取代成自己實做的 test_malloc()
和 test_free()
。strdup()
, strcpy()
, strncpy()
差異,以及實做內容。我習慣在剛開始接觸一支程式時,先了解大致的程式結構。
在我開始接觸 Linux 之後,我認識了 GUN make 。
這是一個非常好的東西,它可以完成許多自動化工作。
最重要的是它的檔案 Makefile ,我們可以很輕鬆的透過觀察這個檔案來了解整支程式的檔案架構。
如果開發人員習慣很好,就可以從這些檔案之間的關係,找出程式使用了哪些模組。
寫程式的人都知道,大部分最浪費時間的工作就是了解別人的程式碼。我們可以透過 Makefile 來加速這個過程,並且可以有效減少錯誤。
我寫程式的習慣很差,這是我很需要學習的地方。YanJiunSat, Sep 22, 2018 12:19 PM
首先先觀察 Makefile 的參數設定。
gcc
。cc
是 Uinx 編譯器名稱的慣例cc
會直接指到 gcc
。gcc
的參數。-O
最佳化參數: -O0
表示沒有優化, -O1
為預設值,-O3
最高等級優化-g
加入除錯資訊。否則使用 gdb
進行偵錯時,會看不到所有函式名稱。-Wall
顯示所有警告訊息。會顯示編寫程式碼建議。每次使用 gcc
都要加入此參數。-Werror
視告為錯誤,出現任何警告都會停止編譯。function 在數學用語翻譯為「函數」,但在程式語言中一般翻譯為「函式」
了解了。以後會注意用字的精準度。YanJiunSun, Sep 23, 2018 4:13 PM
$ make
#6
和 #17
的 tar cf handin.tar queue.h queue.c
#
)掉,猜測是 CMU 要讓學生教作業用的?請 git rebase
,在 lab0-c 已調整。參見 Git - 更新 fork 出來的 repository
$ make test
script/driver.py
內容,加以分享。$ make clean
先說結論:本次作業無法使用此函式,否則滿分只是假象。
這個函式有用到 malloc()
,因此它回傳的指標使用完需要 free()
。
但 harness.h
#58,59 將 malloc()
和 free()
兩函式都取代成自己實現的函式。
因此這裡使用 free()
釋放 strdup()
回傳的指標會錯誤。因為你用的 free()
其實是 test_free()
。
#include<string.h>
之前,就先 #include<harness.h>
。string
中的 malloc()
也取代成我們的 test_malloc()
。
harness.h
中也有使用到 string.h
,因此需要將所用到的函式都自己實做。string
裡的 malloc()
,不知道是否會有許多衍生問題。strlen()
是自己實做的。strlen.c
時才發現這件事其實沒有這麼簡單。基本上沒什麼好說的。值得一提的是要複製的目的位址要先用 malloc()
配置好空間。
C 語言 setjmp 與 longjmp 函數用法教學
C語言: 認識關鍵字volatile
C 库函数 - signal()