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

onemoo
TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個(gè)贊
D. 這段代碼是合法的,所以可以編譯。
C. 肯定是無法永遠(yuǎn)運(yùn)行下去啦。
A. 這確實(shí)是引起程序終止的原因,但不是直接原因。
B. 程序一直分配內(nèi)存,肯定會(huì)引起內(nèi)存耗盡。而malloc在分配內(nèi)存失敗時(shí)并不會(huì)終止程序,而是返回NULL指針。而第5行代碼試圖向NULL指針位置寫入數(shù)據(jù),這會(huì)引起程序終止(通常操作系統(tǒng)會(huì)因?yàn)椤岸五e(cuò)誤”而終止程序)。
所以 B 才是引起程序退出的直接原因。
- 1 回答
- 1 關(guān)注
- 6996 瀏覽
添加回答
舉報(bào)
0/150
提交
取消