У вас должна быть процедура, которая выделяет и инициализирует экземпляр test_t
. В C ++ или других объектно-ориентированных языках это будет конструктор. В C вы должны бросить свой собственный - что-то похожее на следующее:
test_t *create_test_t(char *init_test_c)
{
test_t *tt;
tt = malloc(sizeof(test_t));
if(init_test_c != NULL)
{
tt->test_c = malloc(strlen(init_test_c)+1);
strcpy(tt->test_c, init_test_c);
}
else
tt->test_c = NULL;
}
Вы также захотите, чтобы функция правильно избавлялась от экземпляра test_t
. Что-то вроде:
void destroy_test_t(test_t *tt, bool static)
{
free(tt->test_c);
if(!static)
free(tt);
}
Параметр static
включен для контроля того, должен ли tt
быть свободным или нет. Очевидно, что вы не хотите пытаться освободить указатель на статический экземпляр test_t
, в этом случае вы передадите TRUE для static
. Для динамически распределяемых экземпляров test_t
, например, созданные с помощью процедуры create_test_t
, вы получите FALSE для static
.
Затем вы используете эти функции каждый раз, когда вам нужно создать или уничтожить test_t
.
Удачи.