У вас есть typedefs, которые включают указатель, например typedef struct MapElements_t{...} *MapElements;
, который делает тип MapElements
указателем.
Это не рекомендуется и по следующей причине:
Когда вы делаете
MapElements new_map_element = malloc(sizeof(new_map_element));
, вы выделяете размер указателя, а не размер объекта, на который указывает.В вашем случае вы должны сделать:
MapElements new_map_element = malloc(sizeof(*new_map_element));
, но желательно, чтобы вы сделали:
typedef struct MapElements_t
{
//...
struct MapElements_t* next;
} MapElements;
, чтобы вы сделали переменную, которая является указателем на объект, который явно имеет *
.
MapElements *new_map_element = malloc(sizeof(*new_map_element));