Я хочу создать связанный список векторов и с помощью библиотеки GLUT получить позиции кликов и добавить их в связанный список.
Это структуры, которые я написал.
typedef struct vector{int x;int y;}Vector;
typedef struct VectorList{Vector X; struct VectorList*next; }node_v;
Я глобально определил вектор P и связанный список векторов prev.
Vector P;
node_v * prev=NULL;
Внутри функции обратного вызова мыши _mouse_CB каждый раз, когда нажимается левая кнопка мыши, я хочу обновить вектор P текущими значениями x и y и добавить их в связанный список.
Это та часть кода.
static void _mouse_CB(int button, int state, int x, int y)
{
if(state==GLUT_DOWN)
{
switch(button)
{
case GLUT_LEFT_BUTTON :
px=x;py=y;
P.x=x;
P.y=y;
prev=VL_new1(P);
append(&prev,P);
break;
функция добавления здесь, которую я написал от geeksforgeeks и добавил некоторое время l oop в конце, чтобы проверить, правильно ли добавлены значения, но я получаю переполнение.
void append(node_v** head_ref, Vector A)
{
node_v* new_node = (node_v*) malloc(sizeof(node_v));
node_v *last = *head_ref;
new_node->X.x = A.x;
new_node->X.y = A.y;
new_node->next = NULL;
if (*head_ref == NULL)
{
*head_ref = new_node;
return;
}
while (last->next != NULL)
last = last->next;
last->next = new_node;
last = *head_ref;
while(last){
printf("%d %d\n", last->X.x,last->X.y);
last = last->next;
}
return;
}
Чтобы создать узел i написал эту функцию
node_v* VL_new1(Vector A){
node_v *new = (node_v*)malloc(sizeof(node_v));
if(new==NULL){exit(1);}
else{
new->X.x = A.x;
new->X.y = A.y;
new->next = NULL;
}
return new;
}
Каждый раз, когда я запускаю эту программу и нажимаю на появившееся окно, на терминале функция printf внутри приложения выводит это
-732680176 -729092496
0 -1344244448
Какие изменения я должен внести в не получить переполнение и успешно добавить текущие значения?