gpt4 book ai didi

c - 为什么我的 C 队列中出现段错误(核心已转储)?

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:09 29 4
gpt4 key购买 nike

所以我试图在 C 中实现队列数据结构,但我不断收到此错误:段错误(核心已转储)。我认为它来 self 的排队方法。有人可以帮我解决这个问题吗...

这是我的queue.c文件

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

void createQueue(LinkedList* list)
{
list = (LinkedList*)calloc(1, sizeof(LinkedList));
}

int isEmpty(LinkedList* list)
{
int empty = 0;
if(list->head == NULL)
{
empty = 1;
}
return empty;
}

void enqueue(LinkedList* list, Person p)
{
LinkedListNode* newNode = (LinkedListNode*)malloc(sizeof(LinkedListNode));
newNode->data = p;
if (isEmpty(list))
{
list->head = list->tail = newNode;
} else
{
LinkedListNode* first = list->head;
first->previous = newNode;
newNode->next = list->head;
list->head = newNode;
}
list->count ++;
}

Person dequeue(LinkedList* list)
{
LinkedListNode* temp;
temp = list->tail;
list->tail = list->tail->previous;
list->count --;

return temp->data;
}

void viewQueue(LinkedList* list)
{
LinkedListNode* current;
current = list->head;
while (current != NULL)
{
printf("Name: %s Birthdate: %s\n", current->data.name, current->data.birthdate);
current = current->next;
}
printf("\nPeople: %d\n", list->count);
}

这是我的头文件...

#ifndef LINKED_LIST
#define LINKED_LIST

#define FALSE 0
#define TRUE !FALSE

typedef struct{
char name[20];
char birthdate[10];
} Person;

typedef struct LinkedListNode{
Person data;
struct LinkedListNode* next;
struct LinkedListNode* previous;
} LinkedListNode;

typedef struct{
LinkedListNode* head;
LinkedListNode* tail;
int count;
} LinkedList;

void createQueue(LinkedList* list);
int isEmpty(LinkedList* list);
void enqueue(LinkedList* list, Person p);
Person dequeue(LinkedList* list);
void viewQueue(LinkedList* list);

#endif

我也有这个方法来测试我的队列。当我运行它时,出现段错误。我的程序有什么问题?

#include <stdio.h>
#include "queue.h"

int main(void)
{
LinkedList* list;
createQueue(list);
Person p1 = {"J Cole", "28/01/1985"};
Person p2 = {"Kendrick Lamar", "19/01/1994"};
Person p3 = {"Slim Shady", "17/10/1972"};
Person p4 = {"Tupac Shakur", "12/09/1971"};

enqueue(list, p1);
enqueue(list, p2);
enqueue(list, p3);
enqueue(list, p4);

viewQueue(list);
return 0;
}

最佳答案

将值(如指针)传递给例程时,为了让例程设置该值,您必须传递它的地址。因此,这一行:

createQueue(list);

应该是:

createQueue(&list);

如果您希望 createQueue 设置变量的值。您还需要:

void createQueue(LinkedList** list)
{
*list = (LinkedList*) calloc(1, sizeof(LinkedList));
}

别担心——每个 C 程序员都曾在某个时候犯过这个错误。有关详细信息,请搜索“按值或引用传递”和“指向指​​针的 c 指针”。

关于c - 为什么我的 C 队列中出现段错误(核心已转储)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39783232/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com