c - 将带有 glut 的点击坐标添加到向量的链接列表中
问题描述
我想创建一个向量的链接列表,并在 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 每次单击鼠标左键时,我想用当前的 x 和 y 值更新 P 向量并将它们附加到链表中。
这是代码的那一部分。
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 编写的 append 函数,并在最后添加了一个 while 循环以检查值是否正确添加,但我正在溢出。
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;
}
为了创建一个节点,我写了这个函数
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 里面的 append 函数会输出这个
-732680176 -729092496
0 -1344244448
我应该进行哪些更改才能不溢出并成功添加当前值?
解决方案
新节点在函数中创建append
:
node_v* new_node = (node_v*) malloc(sizeof(node_v));
该指令prev=VL_new1(P);
生成一个新的列表头。每次执行代码时, thenprev
都会被设置,之前的内容prev
会丢失。
在以下情况下删除:
case GLUT_LEFT_BUTTON :
px=x;py=y;
P.x=x;
P.y=y;
append(&prev,P);
请注意,该函数VL_new1
可以在 中调用append
,而不是:
void append(node_v** head_ref, Vector A)
{
node_v *last = *head_ref;
node_v* new_node = VL_new1(A);
if (*head_ref == NULL)
{
*head_ref = new_node;
return;
}
while (last->next != NULL)
last = last->next;
last->next = new_node;
}
推荐阅读
- python - Centos 7 缺少 python-xml 包
- unity3d - 如何在 Unity 中翻转对撞机网格的法线
- java - 第二个活动怎么crash?
- visual-studio-code - 未找到配置文件
- c# - 使用 C# 从 Image 到 base64 的转换问题
- c++ - 将非静态成员函数作为参数传递给不同类中的成员函数
- irc - Irssi - 如何永久或在配置中设置文本颜色?
- spring-boot - 重新设计以避免 Spring boot 中的循环依赖
- javascript - 为什么我的 React 孙子组件在收到其父组件的 props 更改后没有更新?或者:我需要使用状态吗?
- python - RESTful api 从基于函数的视图到基于类的视图 django rest 框架