设置指向null segfault的指针

时间:2012-07-02 14:25:44

标签: c pointers segmentation-fault

我有一个名为node的结构如下:

struct node {
    int data;
}

存储在某种结构中:

struct structure {
  struct node *pointer;
}

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

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

为什么这个段错误?在将指针设置为null之前,它是否实际尝试取消引用指针?

当我从指向实际结构的指针切换elements并执行以下操作时:

struct structure elements;
elements.pointer = NULL;

它停止segfaulting和工作。为什么不设置指向null的指针?

5 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分:4)

您需要初始化指针

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

您没有初始化*elements

*elements现在指向任何内容,因此elements->pointer无法取消引用任何内容,这会为您提供段错误。

答案 4 :(得分:0)

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