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
指针将指向垃圾。
您需要在堆上分配数据,然后记住在不再需要时释放它。