我正在使用GLib来管理链表。我宣布2个结构并将它们放在一个链表中,如下所示。
Asteroid asteroid = {0,0,50,50,50}
Asteroid asteroids = {0,0,200,200,50};
GList *asteroidList = NULL;
asteroidList = g_list_append(asteroidList, &asteroid);
asteroidList = g_list_append(asteroidList, &asteroids);
然后我使用以下函数遍历list和calla函数,该函数将结构绘制为一个圆圈,如下所示
void drawAsteroids(){
GList *list = asteroidList;
while(list != NULL){
printf("Asteroids");
GList *next = list->next;
drawAsteroid(list->data);
list = next;
}
}
绘图功能
void drawAsteroid(void *asteroid){
Asteroid *newAsteroid = (Asteroid *)asteroid;
printf("%d\n", newAsteroid->xPos);
circleRGBA(renderer, newAsteroid->xPos, newAsteroid->yPos, newAsteroid->r, 0, 255, 0, 255);
}
结构定义如下
typedef struct asteroid{
int xSpeed;
int ySpeed;
int xPos;
int yPos;
int r;
}Asteroid;
当我运行此代码时,我看不到屏幕上的任何内容
答案 0 :(得分:0)
GList
函数不复制数据。如果将Asteroid
结构放在堆栈上,并且超出范围,则list->data
指针将指向垃圾。
您需要在堆上分配数据,然后记得在不再需要时释放它。