C调用链表内容的函数

时间:2017-04-16 19:14:18

标签: c linked-list sdl glib

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

当我运行此代码时,我看不到屏幕上的任何内容

1 个答案:

答案 0 :(得分:0)

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

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