我有一个名为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的指针?
答案 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
尚未初始化为指向任何内容。