c - 为什么这一行使我的程序出现段错误?

标签 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;

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

最佳答案

在您的 init_dda() 调用中,您将第二个参数 d 作为 NULL 传递。

然后,在 init_dda() 中,您尝试取消引用该指针。这(取消引用 NULL 指针,这也是一个无效指针)调用 undefined behaviour .段错误是副作用之一。

解决方案:在将内存传递给 init_dda() 之前,您需要为 d 分配内存。你可以看看malloc()和函数族。

关于c - 为什么这一行使我的程序出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31122027/

相关文章:

c++ - 奇怪的段错误和valgrind分析

c - Malloc 分配超出范围的内存地址

c - 如何避免过早杀死子进程?

c++ - 在 Windows 上为 glut 3.7 构建静态库

c++ - 指针在退出递归函数后更改其地址

c - 关于指针和地址的一些事情

c++ - GCC C++ 编译器是否考虑了 __restrict - 语句?

c - 递归过程

具有非连续布局的 C 位域元素

C:使用 realloc() 转储核心