Следующий код работает нормально:
typedef struct node_s {
void *data;
struct node_s *next;
} NODE;
typedef struct test_s
{
int asdf;
}TEST;
NODE *list_create(void *data)
{
NODE *node;
if(!(node=malloc(sizeof(NODE)))) return NULL;
node->data=data;
node->next=NULL;
return node;
}
NODE *list_insert_after(NODE *node, void *data)
{
NODE *newnode;
newnode=list_create(data);
newnode->next = node->next;
node->next = newnode;
return newnode;
}
NODE *list, *second, *third;
void localstructtest()
{
TEST t;
t.asdf = 10;
third = list_insert_after(second, (void*)&t);
}
int main()
{
TEST th;
TEST* hrm;
/* Create initial elements of list */
list=list_create((void*)"First");
second=list_insert_after(list, (void*)"Second");
localstructtest();
hrm = (TEST*)third->data;
th = *hrm;
return 1;
}
Структура создается локально в функции, отличной от main, но я смог получить данные из связанного списка вне области действия localstructtest (). Локальные переменные создаются в стеке, верно ли это с этой структурой? Или он действительно создается в куче, а указатель / ссылка остается действительным? Я ожидал, что это ужасно провалится, когда я проверил это. Я признаю, что я программист на C ++ и, возможно, я не совсем понимаю последствия отсутствия передачи по ссылке в C. Если все в порядке, использовать данные структуры, подобные этой, когда эти данные когда-нибудь получаются освобожденный
Спасибо!