以下代码工作正常:
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 中没有传递引用的后果。如果可以像这样使用结构数据,那么数据什么时候得到释放?
谢谢!