创建 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*))
。您要分配节点的大小而不是指向节点的指针。
我目前正在尝试创建一个带有链表的电话簿。我首先关注插入功能,但问题是,一旦我创建了 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*))
。您要分配节点的大小而不是指向节点的指针。