程式練習題庫
← 回題目列表
c難度 ●●●●

C7 — 自己跟系統要記憶體,再自己還回去

Python 裡你大概寫過這樣的東西:

all_text = ""
for page in pages:
    all_text += text

每一圈 += 背後,Python 都默默做了一整套事:算出新字串要多大、去跟系統要一塊夠大的記憶體、把舊內容複製過去、接上新內容、把舊的那塊還回去。

這題就是把那套事自己做一遍。

題目

程式裡有一個 int n。請:

  1. malloc 配置一塊能裝 nint 的記憶體
  2. 檢查 malloc 有沒有失敗(回傳 NULL 就是失敗)
  3. 填入 1 到 n 的平方
  4. 印出來
  5. free 還回去

預期輸出(n 為 5 時):

1 4 9 16 25

提示

malloc 要的是位元組數,不是元素個數。nint 要幾個位元組?用 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 看看。

討論區

登入後就能留言和評分。

    還沒有人留言。