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;

它停止段错误并工作。为什么设置指向空的指针不起作用?

4

5 回答 5

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

elements指针指向无处。取消引用无效指针(elements指针)是未定义的行为。

您需要初始化elements指向有效对象的指针,例如:

struct structure my_struct;
struct structure *elements = &my_struct;
elements->pointer = NULL;
于 2012-07-02T14:27:15.843 回答
4

您需要初始化指针

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

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

于 2012-07-02T14:27:56.790 回答
2

您要取消引用的无效指针,即段错误,不是elements->pointer,而是elements它本身。由于它尚未设置(例如:由 a malloc),它可以指向内存中的任何位置。

于 2012-07-02T14:28:07.460 回答
1

你没有初始化*elements

*elements现在什么都不指向,取消引用也不指向任何elements->pointer内容,这会给您带来段错误。

于 2012-07-02T14:27:20.183 回答
0

elements尚未初始化为指向任何内容。

于 2012-07-02T14:27:20.167 回答