c-动态创建自定义结构的数组



我有一个向量3定义如下:

typedef struct {
    float x;
    float y;
    float z;
} vec3;

然后我在这个数据结构中有几个:

typedef struct sprite {
    cg_quad* quad;
    vec3 scale;
    vec3 pos;
    vec3 angl;
}cg_sprite;

这是一个很好的衡量标准:

typedef struct {
    vec3 angles;
    GLshort vertex_count;
    GLfloat vertices[12];
    GLfloat colors[16];
    GLshort indices[6];
    GLfloat tex_coords[8];
} cg_quad;

我有一个函数,它只需要一个指向精灵的指针,并假设创建一个指针,然后返回它

cg_sprite* cg_sprite_new(const float x_pos, const float y_pos, const float z_pos, const float w, const float h) {
     cg_sprite* out = calloc(1, sizeof(cg_sprite));
     v3MakeFromElems(&out->scale, w, h, 1);
     v3MakeFromElems(&out->pos, x_pos, y_pos, z_pos);
     v3MakeFromElems(&out->angl, 0.0, 0.0, 0.0);
     v3PrintS(&out->scale);
     v3PrintS(&out->pos);
     v3PrintS(&out->angl);
     return out;
}

这对一个人有效。我想分配一个可以更新和使用的精灵数组。

像这样的东西:

sprite_count = 1;
cg_sprite* sprites;

sprite = calloc(1, sprite_count * sizeof(cg_sprite*));
for(int i = 0; i < sprite_count; i++) {
  sprites[i] = *cg_sprite_new(xpos, ypos, zpos, width, height);
}

然后像这样迭代。

for(int i = 0; i < sprite_count; i++) {
   vPrintS(sprites[i]->pose, "sprite index %dn");
}

像上面那样写代码,第一个循环中的分配不起作用。如果我不先调用数组的大小,我就会出现seg错误。

如果我添加了胼胝体,我会得到

*** Error in `executable/main': corrupted double-linked list: 0x0000000001a15670 ***

有什么建议吗?

在您的代码片段中,有几件事让我觉得有点奇怪。虽然我不确定他们中的任何一个是造成你的错误。

  1. vPrintS(sprites[i]->pose, "sprite index %dn");类似于典型的printf类型va args函数,带有%d说明符,但没有匹配的以下参数
  2. vPrintS(sprites[i]->pose, "sprite index %dn");精灵[i]是具有pos成员但没有pose成员的cg_sprite类型
  3. sprite = calloc(1, sprite_count * sizeof(cg_sprite*));您是想将calloc的返回值分配给sprite还是sprites?我看不出你在任何地方声明sprite

如果你需要更多的东西来回到正轨,我建议你提供一个mcve

相关内容

  • 没有找到相关文章

最新更新