创建 3 - 5 个节点后,遇到分段错误。为什么?

Upon creation of 3 - 5 nodes, segmentation fault is encountered. Why?

我目前正在尝试创建一个带有链表的电话簿。我首先关注插入功能,但问题是,一旦我创建了 3 - 5 个节点,onlineGDB 就会显示错误“malloc:损坏的顶部大小”,而 VS 代码显示我遇到了分段错误。

我认为这是我分配内存的方式的错误。这是我第一次处理包含字符串作为数据而不是整数的结构,所以我可能错过了一两件事。

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

struct node{
    char name[30];
    char number[15];
    struct node *next;
};

void showMenu();
void insertData(struct node **head, char person[], char phone[]);
void showData(struct node *head);

int main(){

    struct node *head = NULL;
    char name[30], number[15];
    while(1)
    {
        printf("Name : ");
        scanf(" %[^\n]s", name);
        printf("Number: ");
        scanf(" %[^\n]s", number);
        insertData(&head, name, number);
        showData(head);
    }
    return 0;
}

void insertData(struct node **head, char person[], char phone[]){

    struct node *new_node = (struct node*) malloc(sizeof(struct node*));
    strcpy(new_node->name, person);
    strcpy(new_node->number, phone);
    new_node->next = *head;
    *head = new_node;
}

void showData(struct node *head){

    while(head != NULL)
    {
        printf("%s\t\t%s\n", head->name, head-> number);
        head = head->next;
    }    
    printf("\n");
}

在函数 insertData() 中使用 malloc(sizeof(struct node)) 而不是 malloc(sizeof(struct node*))。您要分配节点的大小而不是指向节点的指针。