民國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 為準。