将指针设置为null会导致段错误

4

我有一个名为node的结构体,如下所示:

struct node {
    int data;
}

存储在某些结构中:

struct structure {
  struct node *pointer;
}

我正在尝试将指针设置为NULL,如下:

struct structure *elements;
elements->pointer = NULL;

为什么会出现段错误?在将指针设置为空之前它是否尝试取消引用指针?

当我将elements从指针更改为实际的结构体,并执行以下操作时:

struct structure elements;
elements.pointer = NULL;

它停止了段错误并且可以运行。为什么将指针设置为 null 不起作用?

2
哇,这个问题解决得真快。 - Hans Z
5个回答

7
struct structure *elements;
elements->pointer = NULL;

elements指针没有指向任何位置。对于无效的指针(elements指针)进行解引用是未定义的行为。

您需要将elements指针初始化为一个有效的对象,例如:

struct structure my_struct;
struct structure *elements = &my_struct;
elements->pointer = NULL;

4

您需要初始化指针

struct structure *elements = malloc(sizeof(struct structure));

如果你不这样做,它会指向任意内存位置。


2
您正在解引用的无效指针,因此导致了段错误,不是elements->pointer,而是elements本身。由于它没有被设置(例如:通过malloc),它可能指向内存中的任何位置。

他正在取消引用一个未初始化的指针。它可能是NULL,也可能不是。 - Graham Borland

1

您没有初始化*elements

*elements现在指向空,因此elements->pointer正在对空引用进行解引用,这导致了段错误。


他正在取消引用一个未初始化的指针。它可能是null,也可能不是。 - Graham Borland
1
停止因为技术细节而对每个人进行贬低评价,@Graham,我已经编辑了我的回答。 - Hans Z

0

elements 还没有被初始化指向任何东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接