【发布时间】:2021-05-27 10:52:57
【问题描述】:
我正在尝试将人员信息结构存储到单个链表中并对其执行一些操作
我的结构信息是
struct Person {
char name[MAX];
char id[MAX];
};
而我的单链表是使用 struct like 定义的
struct Node {
struct Person* pPerson;
struct Node* pNext;
};
我的想法是通过获取用户的输入来定义一个Person 结构
struct Person* newPerson() {
Person* pPerson = NULL;
pPerson = (Person*)malloc(sizeof(Person));
printf("name: "); scanf("%s", pPerson->name);
printf("id: "); scanf("%s", pPerson->id);
return pPerson;
}
这是initNode 新创建节点的函数
struct Node* newNode(Person* pNewPerson) {
Node* pPeople = NULL;
pPeople = (struct Node*)malloc(sizeof(struct Node));
pPeople->pPerson = pNewPerson;
return pPeople;
}
这是我的 insert 函数,将结构体 Person 存储在列表中
void insert(Node* pHead, Person* pNewPerson) {
Node* pCurrent = pHead;
while (pCurrent != NULL) {
pCurrent = pCurrent->pNext;
}
pCurrent = (Node*)malloc(sizeof(Node));
pCurrent->pNext->pPerson = pNewPerson;
pCurrent->pNext = NULL;
}
最后是display函数
void display(Node* pHead) {
Node* pCurrent = pHead;
int index = 1;
while (pCurrent != NULL) {
printf("Person %d\n", index);
printf("name: %s\n", pCurrent->pPerson->name);
printf("id: %s\n", pCurrent->pPerson->id);
index += 1;
pCurrent = pCurrent->pNext;
}
}
我只是测试,但我的代码中某处似乎有问题
Node* pNode = NULL;
Person* pPerson = NULL;
pPerson = newPerson();
pNode = newNode(pPerson);
insert(pNode, pPerson);
display(pNode);
当我得到输入值但输出是segmentation default core dump。
我是指针的新手,我只是按照逻辑将指针分配到需要的位置。
有人可以纠正我吗?
EDIT: 问题解决了
struct Person* newPerson() {
Person* pPerson = NULL;
pPerson = (Person*)malloc(sizeof(Person));
printf("name: "); scanf("%s", pPerson->name);
printf("id: "); scanf("%s", pPerson->id);
return pPerson;
}
struct Node* newNode(Person* pNewPerson) {
Node* pPeople = (struct Node*)malloc(sizeof(struct Node));
pPeople->pPerson = pNewPerson;
pPeople->pNext = NULL;
return pPeople;
}
void insert(Node* pHead, Person* pNewPerson) {
Node* pCurrent = pHead;
if (pCurrent == NULL)
{
return pNewNode;
}
while (pCurrent-> pNext != NULL) {
pCurrent = pCurrent->pNext;
}
pCurrent->pNext = pNewNode;
}
void display(Node* pHead) {
Node* pCurrent = pHead;
int index = 1;
while (pCurrent != NULL) {
printf("Person %d\n", index);
printf("name: %s\n", pCurrent->pPerson->name);
printf("id: %s\n", pCurrent->pPerson->id);
index += 1;
pCurrent = pCurrent->pNext;
}
}
【问题讨论】:
-
提示:不要让结构体的字符串被曲解为
MAX,而是使用大小完全符合需要的分配,如char*属性。 -
提示:不要将
X* x = NULL; x = (X*) malloc(sizeof(X))分两步,简化为X* x = malloc(sizeof(X))即可。无需演员表。没有pre-NULL。 -
??????小心前行,看看会发生什么?
-
查看我的回答的最后更新:stackoverflow.com/a/67721142/4386427
标签: c pointers struct singly-linked-list