C語言基礎
C語言中,(1) 在函式中沒有加 static 宣告的區域變數、(2) 以 malloc 配置的區域、(3) 在函式外宣告的變數,各自存在的期間(生命週期)的組合,下列何者正確?
- A(1) 到程式結束為止、(2) 到配置它的函式返回為止、(3) 到程式結束為止
- B(1) 到離開宣告它的區塊為止、(2) 到以 free 釋放為止、(3) 到程式結束為止
- C(1) 到離開宣告它的區塊為止、(2) 到程式結束為止(中途無法釋放)、(3) 到最先使用該變數的函式返回為止
查看答案與解析
正確答案:B. (1) 到離開宣告它的區塊為止、(2) 到以 free 釋放為止、(3) 到程式結束為止
(1) 的自動變數一般放在堆疊上,進入宣告它的區塊時建立,離開時消失。(2) 以 malloc 配置的區域位於堆積,函式返回後仍保留,在以 free 釋放之前都能使用。(3) 函式外的變數(以及加上 static 的變數)在程式執行期間一直存在,放在 .data 或 .bss 這類靜態區域。使用指向生命週期已結束之區域的指標,或忘了 free 而讓區域一直殘留,是常見錯誤的原因。
- A. 自動變數在離開宣告它的區塊時消失,malloc 的區域在函式返回後仍保留。
- B. 正確。這是自動、動態、靜態三種生命週期的差異。
- C. malloc 的區域隨時可以用 free 釋放,函式外的變數在程式執行期間一直存在。