我的链表和节点定义如下:
struct node{
int item;
struct node *next;
};
struct linkedlist{
int size;
struct node *head;
};
struct linkedlist *L=(struct linkedlist*)malloc(sizeof(struct linkedlist));
使用有什么区别
struct node *temp=malloc(sizeof(struct node));
temp=L->head;
和:
struct node *temp=L->head;
(不使用malloc)
基本上,如果我对临时指针做了任何更改(例如temp->item=3),它会在两种情况下都反映在原始链表L中吗?
感谢
对链表结构使用malloc没有多大意义,但它对节点来说确实有意义。
struct linkedlist L = {0, NULL}; // L is empty list
struct node *temp
temp = malloc(sizeof(struct node)); // allocate a node
temp->item = 2;
temp->next = L.head; // insert it to start of list
L.head = temp;
L.size += 1;
temp = malloc(sizeof(struct node)); // allocate another node
temp->item = 1;
temp->next = L.head; // insert it to start of list
L.head = temp;
L.size += 1;
temp = malloc(sizeof(struct node)); // allocate another node
temp->item = 0;
temp->next = L.head; // insert it to start of list
L.head = temp;
L.size += 1;
struct node *temp=malloc(sizeof(struct node));
temp=L->head;
在这种情况下,您将丢失对malloc()
分配的内存块的引用,并且将无法free()
分配的内存(导致内存泄漏)。
这是没有意义的,因为在分配内存后,您会更改指针指向的位置。