← 回題目列表
c難度 ●●●●
C7 — 自己跟系統要記憶體,再自己還回去
Python 裡你大概寫過這樣的東西:
all_text = ""
for page in pages:
all_text += text
每一圈 += 背後,Python 都默默做了一整套事:算出新字串要多大、去跟系統要一塊夠大的記憶體、把舊內容複製過去、接上新內容、把舊的那塊還回去。
這題就是把那套事自己做一遍。
題目
程式裡有一個 int n。請:
- 用
malloc配置一塊能裝n個int的記憶體 - 檢查
malloc有沒有失敗(回傳NULL就是失敗) - 填入 1 到 n 的平方
- 印出來
- 用
free還回去
預期輸出(n 為 5 時):
1 4 9 16 25
提示
malloc 要的是位元組數,不是元素個數。n 個 int 要幾個位元組?用 sizeof(int) 算,不要自己假設是 4。
malloc 回傳的是 void *,指派給 int * 就能當陣列用:arr[i] 和一般陣列寫法一樣。
會照出 Python 藏了什麼
三件 Python 從來不用你操心的事:
要多少——Python 的 list 會自己長大,C 要你事先算好位元組數。
要不到怎麼辦——malloc 可能失敗回傳 NULL,這時候你如果直接寫進去,程式就當場崩潰。Python 記憶體不足會丟例外,至少還告訴你發生什麼事。
用完誰收——忘記 free 就是記憶體洩漏,程式跑越久吃越多。free 兩次或 free 之後又拿來用,是更難查的 bug。Python 的垃圾回收就是在幫你做這件事。
這題是整條 C 副線的收束點:做完你會知道 all_text += text 那一行,每一圈幫你做了多少事。
本機編譯
gcc main.c -o main.exe
./main.exe
需要先裝好 C 編譯器。Windows 可以用 MinGW-w64 或 w64devkit,macOS 與 Linux 通常內建或用套件管理器安裝。
寫在這裡
C 題不提供線上執行,自己在本機編譯,寫完可以請 AI 看看。
討論區
登入後就能留言和評分。
還沒有人留言。