C调用链表内容的函数

我正在使用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); 

然后我使用以下函数遍历列表和calla函数,将结构绘制为屏幕,如下所示

 void drawAsteroids(){ GList *list = asteroidList; while(list != NULL){ printf("Asteroids"); GList *next = list->next; drawAsteroid(list->data); list = next; } } 

绘图function是

 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; 

当我运行此代码时,我没有看到任何绘制到屏幕上的内容

GList函数复制数据。 如果将Asteroid结构放在堆栈上,并且它超出范围,则list->data指针将指向垃圾。

您需要在堆上分配数据,然后记住在不再需要时释放它。