Я в Vector3 определены следующим образом:динамически создавать массив пользовательских структур
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 %d\n");
}
Выписывая код, как указано выше, распределение в первом цикле не работает. Если я не вызываю размер массива, я получаю ошибку seg.
Если я добавить calloc, я получаю
*** Error in `executable/main': corrupted double-linked list: 0x0000000001a15670 ***
Любые рекомендации по сортировке это?