打印全局指针给出了coredump

时间:2015-06-04 21:09:15

标签: c memory global-variables

我在下面写了一个简单的程序:

#include <stdio.h>

unsigned int *time = 0;
int main(){
  printf("time = %u\n", *time);
  return 0;
}

这会让我在x86-64上出现分段错误。有人可以解释根本原因吗?

1 个答案:

答案 0 :(得分:3)

正如一些评论所提到的那样,你正在取消引用指向它不应该存在的内存区域的指针。

unsigned int *time = 0;

声明指向无符号整数的指针,它指向的内存地址是地址0x0。然后您取消引用此指针,这是一个问题,因为您要求读取地址0x0处的内容,这会导致分段错误。也许如果你详细说明你想要做什么,我们可以给你一些关于如何进行的额外信息,但我不确定你对上述程序的确切要求。