民國110年 普通考試 電子工程 計算機概要

第25題

下列C++的部分程式碼,會產生何種問題?int *p1=new int;int *p2=new int;*p2 = 40;p1 = p2;delete p2;

題目

下列C++的部分程式碼,會產生何種問題?int *p1=new int;int *p2=new int;*p2 = 40;p1 = p2;delete p2; A. 程式語法的錯誤 B. 資料型態不相容的錯誤 C. p1 是迷途指標(dangling pointer) D. p2 是迷途指標(dangling pointer)

官方答案

  • 答案:C. p1 是迷途指標(dangling pointer)

解析

new int 兩次分別配置兩塊記憶體,p1、p2 各自指向不同位址;*p2 = 40 寫入第二塊。p1 = p2 讓 p1 改指向第二塊,第一塊的位址因此遺失(memory leak)。delete p2 釋放第二塊後,p2 所指的記憶體已被回收,但 p1 仍保留同一位址且未更新,故 p1 成為迷途指標(dangling pointer),之後對 *p1 取值或 delete p1 都是未定義行為。程式語法與型別均合法,並非語法錯誤或型別不相容的錯誤。

AI 參考解析(推得答案已與官方答案比對一致),非官方公告內容,僅供備考參考。

官方資料

答案以考選部公告之測驗式試題標準答案 PDF 為準。