来源:公众号【编程珠玑】
作者:守望先生
ID:shouwangxiansheng
解引用NULL指针为什么会出错,导致程序挂死?或者说访问内存地址为0的位置为什么会视为非法?
先了解NULL
参考《NULL,0,'\0'有何区别?》。
解引用NULL
解释问题之前,先描述问题。请看下面的代码:
//来源:公众号【编程珠玑】
//https://www.yanbinghu.com
#include<stdio.h>
int main(void)
{
char *p = NULL;
char c = *p;
return 0;
}
运行:
Segmentation fault
为什么会出现这样的错误呢?解释这个问题之前,先简单了解以下程序地址空间布局。
程序地址空间布局
本文不深入介绍,而仅简单介绍进程的虚拟地址空间(注意下面提到的都不是实际的物理地址),以便帮助我们理解标题的问题。
程序运行起来后,会映射到一个虚拟地址空间。对于32位程序,它是一个4G的大小(一个32位程序,能用到的内存也不过4G)。
其布局如下: