关于malloc,这题为什么选B啊?

关于malloc,这题为什么选B啊?

问题描述:

p每次申请一个字节的内存,然后把0作为该地址上的值,然后循环。是这样理解吗?

img

D. 这段代码是合法的,所以可以编译。
C. 肯定是无法永远运行下去啦。
A. 这确实是引起程序终止的原因,但不是直接原因。
B. 程序一直分配内存,肯定会引起内存耗尽。而malloc在分配内存失败时并不会终止程序,而是返回NULL指针。而第5行代码试图向NULL指针位置写入数据,这会引起程序终止(通常操作系统会因为“段错误”而终止程序)。

所以 B 才是引起程序退出的直接原因。