c语言 - 在创建指向链表节点的指针时,malloc 和不使用 malloc 有什么区别?



我的链表和节点定义如下:

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()分配的内存(导致内存泄漏)。

这是没有意义的,因为在分配内存后,您会更改指针指向的位置。

相关内容

  • 没有找到相关文章

最新更新