У меня есть функция, которая создает и возвращает новый объект для списка, но у меня проблемы с распределением памяти (ошибка: ядро сброшено). Я подумал, что это из-за '* модель', которая является указателем на массив для структур. Я совершенно новичок в динамическом распределении памяти и не уверен, что и как выделять нужный объем памяти.
Функция:
// Return a newly created object based on the arguments provided.
object_t *create_object(SDL_Surface *surface, triangle_t *model, int numtriangles)
{
// Allocate memory for a new object
object_t *new_obj = malloc(sizeof(object_t));
if (new_obj == NULL)
return NULL;
// Allocate memory for the model array
triangle_t *arrayPtr = malloc((sizeof(triangle_t))*numtriangles);
if (arrayPtr == NULL)
return NULL;
// Assign values
arrayPtr = model;
new_obj->model = arrayPtr;
new_obj->numtriangles = numtriangles;
new_obj->surface = surface;
// Return created object
return new_obj;
}
Вызов функции в основном:
object_t *ball = create_object(surface, sphere_model, SPHERE_NUMTRIANGLES);
Структура:
typedef struct object object_t;
struct object {
float scale;
float rotation;
float tx, ty;
float speedx, speedy;
unsigned int ttl;
int numtriangles;
triangle_t *model;
SDL_Surface *surface;
};
typedef struct triangle triangle_t;
struct triangle {
int x1, y1;
int x2, y2;
int x3, y3;
unsigned int fillcolor;
float scale;
int tx, ty;
float rotation;
SDL_Rect rect;
int sx1, sy1;
int sx2, sy2;
int sx3, sy3;
};
Массив:
#define SPHERE_NUMTRIANGLES 478 // <-- Array size
triangle_t sphere_model[] = {
{
.x1=-1,
.y1=-500,
.x2=-1,
.y2=-489,
.x3=-1,
.y3=-500,
.fillcolor=0xeeeeee,
.scale=1.0
},
{
.x1=-1,
.y1=-489,
.x2=-1,
.y2=-500,
.x3=40,
.y3=-489,
.fillcolor=0xbb0000,
.scale=1.0
},
...
Я пытался object_t *new_obj = malloc(sizeof(object_t) + (sizeof(triangle_t)*numtriangles));
, но безуспешно.