看到一道题是这样的:
char *p;
while (1) {
p = malloc(1);
*p = 0;
}
答案是:最终程序会因为向0地址写入而退出
我一直搞不懂是为什么,请你们帮我解释一下,谢谢。
看到一道题是这样的:
char *p;
while (1) {
p = malloc(1);
*p = 0;
}
答案是:最终程序会因为向0地址写入而退出
我一直搞不懂是为什么,请你们帮我解释一下,谢谢。
收起
这是个死循环,程序一直通过malloc申请内存,肯定会引起内存耗尽。然后malloc分配内存失败,返回NULL指针,"*p=0"这行试图向NULL指针写入数据,进而引起程序终止(通常操作系统会因为“段错误”而终止程序,就是向不允许写入数据的内存写入数据)。
报告相同问题?