C語言基礎
C語言中,參考 NULL 指標(p 為 NULL 時讀取 *p)時的說明,下列何者正確?
- A標準規定一定會被偵測為執行時錯誤,在任何環境中都會顯示錯誤訊息並停止程式
- BNULL 規定指向0號位址,因此在任何環境中都會讀出0號位址的內容並繼續處理
- C是未定義行為,在作業系統上一般會異常終止,但在沒有MMU的微控制器上可能讀得到0號位址而沒有察覺
查看答案與解析
正確答案:C. 是未定義行為,在作業系統上一般會異常終止,但在沒有MMU的微控制器上可能讀得到0號位址而沒有察覺
參考 NULL 指標是未定義行為,會發生什麼事標準並未規定。Linux 或 Windows 不會在0號位址附近配置頁面,因此參考時會發生分頁錯誤,程式一般會異常終止(例如 Linux 的區段錯誤)。在沒有MMU的小型微控制器上,0號位址可能有快閃記憶體或中斷向量表而能夠讀取,錯誤可能沒有表現出來就造成誤動作。使用指標前確認它不是 NULL 非常重要。
- A. 標準把參考 NULL 指標定為未定義行為,並未要求偵測。
- B. 參考 NULL 指標是未定義行為。在作業系統上,0號位址附近不會被配置,多數情況下會異常終止。
- C. 正確。依環境不同,可能異常終止,也可能在沒有察覺下繼續運作。