【发布时间】:2020-09-25 16:26:04
【问题描述】:
下面的代码sn-p 在create() 函数中为一个Node 分配内存,并创建一个名为list 的指针指向该Node 的指针。然后它在 main() 中为另一个节点分配更多内存,最后在 test() 中为另一个节点分配内存。在 test() 中为节点分配内存后,存储在列表中的数据会更改。为什么会这样?
#include <stdio.h>
#include <stdlib.h>
typedef struct Node Node;
typedef struct Node {
int data;
} Node;
Node **create(void)
{
Node *head = malloc(sizeof(Node));
head->data = 1;
Node **list = &head;
return list;
}
void test(void)
{
Node *node = malloc(sizeof(Node));
}
int main()
{
Node **list = create();
printf("Data after create(): %d\n", (*list)->data);
Node *node = malloc(sizeof(Node));
printf("Data after allocating memory for new node in main(): %d\n", (*list)->data);
test();
printf("Data after allocating memory for new node in test(): %d\n", (*list)->data);
return 0;
}
样本输出:
Data after create(): 1
Data after allocating memory for new node in main(): 1
Data after allocating memory for new node in test(): -129660600
【问题讨论】:
-
Node **list = &head;你返回一个局部变量的地址。从函数返回后,该变量的生命周期结束,内存可以重复使用。 -
这是一个怎样的列表?节点之间没有链接。