发送结构地址时的Segfault

时间:2017-02-14 09:14:57

标签: c segmentation-fault structure

我有这样的结构:

typedef struct  s_struct
{
    float   x1;
    float   y1;
    float   x2;
    float   y2;
}               t_struct;

这用于在我的屏幕上绘制一些笔画,但我有一点问题,我想在按下右箭头时更改我的X值,但它是段错误,我认为是因为我没有' t正确发送我的结构地址...... 这就是我的方式:

void            draw_all(t_struct *param)
{
    draw_horizon(param);
    draw_verti(param);
}

void        draw_horizon(t_struct *param)
{

            param->x1 = param->x1 + param->C_Y;
            param->y1 = param->y1 + param->C_X;
            param->x2 = param->x2 + param->C_Y;
            param->y2 = param->y2 + param->C_X;
            param->y2 = param->y2 + param->C_X;
            stroke(param);
}

当我按下右箭头时调用的函数:

int     event(int keycode, t_struct *param)
{
    if (keycode == 53)
    {
        printf("exit succes.\n");
        exit(1);
    }
    if (keycode == 124)
    {
        printf("====\n");
        printf("PRE C_X = %f\n", param->C_X);
        param->C_X = param->C_X + 1;
        printf("POST C_X = %f\n", param->C_X);
        draw_all(&param);
    }
    return (0);
}

我的函数draw_verti是相同的但是对于垂直笔画... 段错误是因为我有我的结构的副本,我没有成功发送地址... 谢谢!

1 个答案:

答案 0 :(得分:4)

event函数中,变量param是一个指针。当您执行&param时,您会获得指向的指针,该指针的类型为t_struct **。这不是预期的draw_all函数。

你的编译器应该抱怨它, 如果 你有适当的原型。