在双向链表的末尾插入节点

时间:2014-11-06 13:58:19

标签: c data-structures doubly-linked-list

我尝试使用插入函数在双向链表的末尾插入节点,但是在第二次插入后进程执行突然停止。我试着检查插入函数中使用的所有指针变量的地址,它们表明我的代码工作正常,直到第三个插入函数。我该如何修复我的代码?

#include <stdio.h>
#include <stdlib.h>

struct node {
    int data;
    struct node* next;
    struct node* prev;
};

void insert(struct node** header,int data) {
    struct node* newnode=(struct node*)malloc(sizeof(struct node*));
    newnode->data=data;
    newnode->prev=NULL;
    newnode->next=NULL;

    if(*header == NULL) {
        *header=newnode;
        return;
    }

    struct node* temp = *header;

    while(temp->next != NULL) {
        temp=temp->next;
    }

    temp->next = newnode;
    newnode->prev = temp;
    printf("%d\n**\n", temp->next);
}

void main() {
    struct node* head = NULL;
    insert(&head, 4);
    insert(&head, 45);
    printf("\n main head %d", head);
    insert(&head, 8);
    printf("testing");
    insert(&head, 69);
}

1 个答案:

答案 0 :(得分:2)

您没有分配足够的内存

struct node* newnode=(struct node*)malloc(sizeof(struct node*)); 
// here you allocate only 4 bytes (or 8 bytes on a 64 bit system)

应该是:

struct node* newnode = (struct node*)malloc(sizeof(struct node));

然后一切正常。