我删除了无用的部分代码,以使我的帖子更清晰。
问题是,函数init_dda()
中的第一个也是唯一的一行使我的程序出现了段错误,我真的不明白它是怎么可能的,如果你有解释的话,谢谢你。
void dda_algorithm(t_env *e)
{
t_dda *d;
d = NULL;
init_dda(e, d);
}
void init_dda(t_env *e, t_dda *d)
{
d->map_x = 3;
}
以下是我的结构t_dda
的构造:
typedef struct s_dda
{
int map_x;
} t_dda;
启用警告标志时没有编译错误。
答案 0 :(得分:3)
在init_dda()
调用中,您将第二个参数d
传递为NULL。
然后,在init_dda()
内,你试图取消引用该指针。这(取消引用NULL指针,也是无效指针)调用undefined behaviour。分割错误是副作用之一。
解决方案:在将内存传递给d
之前,您需要将内存分配给init_dda()
。您可以查看malloc()
和函数族。
答案 1 :(得分:2)
您正在为未初始化的内容分配值。
你的d指针为空,但你正试图在其中写入内容。
答案 2 :(得分:1)
您使用第二个参数init_dda
调用了d
,您刚刚将其分配给NULL
。因此,您的代码试图取消引用NULL,这是一种很好的seg错误方法。
答案 3 :(得分:1)
init_dda(e, d)
调用 d=NULL
,然后尝试取消引用它:
d->map_x = 3;
这显然会造成内存访问冲突,从而导致分段错误。
答案 4 :(得分:0)
有一个空指针:
d = NULL;
传递给函数:
init_dda(e, d);
您正在访问此结构的成员,该成员为null:
d->map_x = 3;
但 d为空
这会导致段错误