为什么这行使我的程序段错误?

时间:2015-06-29 17:35:40

标签: c pointers segmentation-fault

我删除了无用的部分代码,以使我的帖子更清晰。

问题是,函数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;

启用警告标志时没有编译错误。

5 个答案:

答案 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为空
这会导致段错误