高考申論題
106年
[資訊處理] 程式語言
第 二 題
📖 題組:
二、程式語言中,指標(Pointers)是一個非常強大有用的工具,但是也可能為程式帶來 Dangling Pointer 和 Memory Leakage 問題。(25 分) (一)請使用下列的 C 程式碼說明何謂 Dangling Pointer 和 Memory Leakage 問題,並解釋其發生原因。 int *p1, *p2, *p3, *p4; p1 = (int*) malloc (sizeof(int)); p2 = p1; free p1; p3 = (int*) malloc (sizeof(int)); p4 = (int*) malloc (sizeof(int)); p3 = NULL; (二)請從 Compiler 的角度,說明什麼方法可以解決這兩個問題?
二、程式語言中,指標(Pointers)是一個非常強大有用的工具,但是也可能為程式帶來 Dangling Pointer 和 Memory Leakage 問題。(25 分) (一)請使用下列的 C 程式碼說明何謂 Dangling Pointer 和 Memory Leakage 問題,並解釋其發生原因。 int *p1, *p2, *p3, *p4; p1 = (int*) malloc (sizeof(int)); p2 = p1; free p1; p3 = (int*) malloc (sizeof(int)); p4 = (int*) malloc (sizeof(int)); p3 = NULL; (二)請從 Compiler 的角度,說明什麼方法可以解決這兩個問題?
📝 此題為申論題,共 2 小題
小題 (二)
請從 Compiler 的角度,說明什麼方法可以解決這兩個問題?
思路引導 VIP
看到此題,應先思考編譯器與程式語言層級如何介入記憶體管理。可以從『編譯期(Compile-time)』的靜態檢查(如 Rust 的所有權機制、資料流分析),以及『執行期(Run-time)』的自動管理機制(如垃圾回收、智慧指標、墓碑機制)兩大面向切入作答。
小題 (一)
請使用下列的 C 程式碼說明何謂 Dangling Pointer 和 Memory Leakage 問題,並解釋其發生原因。
int *p1, *p2, *p3, *p4;
p1 = (int*) malloc (sizeof(int));
p2 = p1;
free p1;
p3 = (int*) malloc (sizeof(int));
p4 = (int*) malloc (sizeof(int));
p3 = NULL;
int *p1, *p2, *p3, *p4;
p1 = (int*) malloc (sizeof(int));
p2 = p1;
free p1;
p3 = (int*) malloc (sizeof(int));
p4 = (int*) malloc (sizeof(int));
p3 = NULL;
思路引導 VIP
面對指標與記憶體管理的題目,首先應在腦海中或紙上畫出「指標」與「記憶體區塊」的指向關係圖(Memory Map)。透過逐行追蹤動態配置(malloc)、指標賦值(aliasing)、釋放(free)與覆寫(= NULL)的過程,精準找出何處記憶體被釋放但仍有指標殘留(迷途指標),以及何處記憶體尚未釋放卻已失去所有指標參照(記憶體洩漏)。