2017-02-14 11 views
-1

У меня есть структура, как это:Segfault когда я посылаю структуру адрес

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

это используется, чтобы сделать некоторый удар на моем экране, но у меня есть небольшая проблема, я хочу изменить X значения, когда право стрелка нажата, но она возвращает ошибку сегментации, я думаю, это потому, что я не посылаю должным образом свою структуру адреса ... Это, как я:

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 та же, но для удара вертикалей ... потому, что выдаёт ошибку сегментации у меня есть копия моей структуры, и я не удается отправить адрес ... Спасибо!

+0

Что такое 't_fdf'? – Marievi

+3

Да, и еще много вашего кода (актуального для этого вопроса) также отсутствует! –

+0

Неверное имя извините ... – Aornn

ответ

4

В функции event переменная param является указателем. Когда вы делаете &param, вы получаете указатель на указатель, который имеет тип t_struct **. Это не то, что ожидала функция draw_all.

Ваш компилятор должен жаловаться на него, если вы имели соответствующие прототипы.

+0

ho yes ... i не видел эту ошибку, спасибо – Aornn