打印空指针给出“”分段错误(核心转储)

时间:2014-10-14 13:40:48

标签: c pointers

我正在尝试探索C中的指针,所以这个主题很新。我开始知道最佳做法是在声明指针时指定“NULL”。所以在下面的程序中我做了同样的事情:

#include <stdio.h>
int main() {

 unsigned int *ip = NULL;

 printf("Address stored in pointer: %x \n",ip); //gives 0
 printf("Value stored at Address stored in pointer: %d \n",*ip); // gives "Segmentation fault (core dumped)"

 return 0;

}

我无法清楚地知道为什么会这样。它不应该输出一个值(NULL或其他东西)。

我正在使用centos 6.5和gcc版本4.4.7。

1 个答案:

答案 0 :(得分:2)

人们将NULL分配给指针以指示它指向任何内容。

取消引用指向不属于您的程序的内存的指针
NULL==0和地址0属于您的操作系统) 是未定义的行为

人们将NULL分配给能够编写的指针

if(ip) //NULL==0==false, so the condition means "if ip points to something"
    printf("Value stored at Address stored in pointer: %d \n",*ip);
else printf("The pointer points to NULL, it can't be dereferenced\n");