【问题标题】:Setting a pointer to null segfault设置指向空段错误的指针
【发布时间】:2012-07-02 23:34:40
【问题描述】:

我有一个名为 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;

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

【问题讨论】:

  • 哇,这个问题很快就解决了

标签: c pointers segmentation-fault


【解决方案1】:
struct structure *elements;
elements->pointer = NULL;

elements 指针不指向任何地方。取消引用无效指针(elements 指针)是未定义的行为。

你需要初始化elements指向一个有效对象的指针,比如:

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

【讨论】:

    【解决方案2】:

    你需要初始化指针

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 他正在取消引用 未初始化 指针。它可能是也可能不是NULL
      【解决方案4】:

      你没有初始化*elements

      *elements 现在什么都没有,所以elements->pointer 没有取消引用,这给了你你的段错误。

      【讨论】:

      • 他正在取消引用 未初始化 指针。它可能是也可能不是null
      • 停止在技术上对每个人投反对票,@Graham,我已经编辑了我的答案。
      【解决方案5】:

      elements 尚未初始化为指向任何对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 2021-04-09
        相关资源
        最近更新 更多