一道選擇題如下:對于以下代碼段,正確的說法是:(__)char?*p;
while(1)
{
????p?=?malloc(1);
????*p?=?0;
}A:最終程序?會因為?沒有空間?而退出
B:最終程序?會因為?向?0?地址寫入?而退出
C:程序會一直運行下去
D:程序不能被編譯正確答案: B為什么?求解
1 回答
已采納

onemoo
TA貢獻883條經驗 獲得超454個贊
D. 這段代碼是合法的,所以可以編譯。
C. 肯定是無法永遠運行下去啦。
A. 這確實是引起程序終止的原因,但不是直接原因。
B. 程序一直分配內存,肯定會引起內存耗盡。而malloc在分配內存失敗時并不會終止程序,而是返回NULL指針。而第5行代碼試圖向NULL指針位置寫入數據,這會引起程序終止(通常操作系統會因為“段錯誤”而終止程序)。
所以 B 才是引起程序退出的直接原因。
- 1 回答
- 1 關注
- 7006 瀏覽
添加回答
舉報
0/150
提交
取消