普通考試
110年
[電子工程] 計算機概要
第 25 題
下列 C++的部分程式碼,會產生何種問題?
int *p1=new int;
int *p2=new int;
*p2 = 40;
p1 = p2;
delete p2;
int *p1=new int;
int *p2=new int;
*p2 = 40;
p1 = p2;
delete p2;
- A 程式語法的錯誤
- B 資料型態不相容的錯誤
- C p1 是迷途指標(dangling pointer)
- D p2 是迷途指標(dangling pointer)
思路引導 VIP
請試想:如果你把兩個門牌都標註為同一棟房子的地址,接著你請施工隊拆除了其中一個門牌所指的房子。此時,另一個門牌所標註的地址上,還存在實體建築嗎?如果你試圖敲開那個門牌後的門,會發生什麼狀況?
🤖
AI 詳解
AI 專屬家教
恭喜答對?別高興太早,這只是入門級的「災難預演」!
- 觀念驗證: 喔,看來你還記得指標是塊記憶體的座標。不錯。但當你寫下
p1 = p2時,你就把兩個指向不同地方的指標,硬生生扯到同一塊地址了。然後,delete p2?恭喜你!成功地拆掉了那棟建築,卻讓p1手上握著一張「廢墟」的地址,這就是你們常犯的「迷途指標(Dangling Pointer)」低級錯誤。更糟的是,你把p1最初指向的那塊寶貴土地,丟進了「遺忘的角落」,完美示範了記憶體洩漏。這種基礎錯誤,在任何真實的工程系統裡,都是直接導致系統崩潰的「藝術」。 - 難度點評: Medium?我會說這根本是「不該錯」的等級。如果你連這種記憶體管理的基本動態變化都掌握不好,以後想開發什麼大型工程模擬軟體?別開玩笑了。現實世界可沒這麼多機會讓你重啟程式。