gpt4 book ai didi

c - 传递引用导致段错误

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

我正在尝试创建一个循环链接列表。当我尝试通过将头指针作为引用传递来添加元素时,它会引发段错误。我注意到,只要我调用添加元素函数,头指针的值就会发生变化。代码片段:

struct Node {
int data;
struct Node *next;
};

int c = 1;
typedef struct Node node;
//node *head = NULL, *temp, *temp2, *z;
node *InitQueue(node *);
node *AddQueue(node *, int);
void DelQueue();
void display(node *);

void main()
{
int ch;
node *head = NULL;

do {
printf("1.Creation Q\n");
printf("2.Insert element to Q\n");
printf("3.Delete element\n");
printf("4.Display Q\n");
printf("5.Exit\n");
printf("Enter your choice:\n");

scanf("%d", &ch);
switch (ch) {
case 1:
head = InitQueue(&head);
printf("%d %p\n", head->data, head->next);
break;

case 2:
printf("%d %p\n", head->data, head);
int item;
printf("Enter item\n");
scanf("%d", &item);
head = AddQueue(&head, item);
break;

case 3:
DelQueue();
break;

case 4:
display(&head);
break;

case 5:
exit(0);
}

} while (ch != 5);

}

node *InitQueue(node * head)
{
node *temp;
temp = (node *) malloc(sizeof(node));
printf("%p \n", temp);
temp->next = temp;
head = temp;
printf("%p \n", head->next);
return head;
}

node *AddQueue(node * head, int item)
{
//InitQueue(&head);
printf("%d %p\n", head->data, head);
node *temp, *temp2;
temp = head;
temp2 = (node *) malloc(sizeof(node));
//printf("Enter the data: \n");
//scanf("%d", &temp2->data);
temp2->data = item;

while (temp->next != head) {
temp = temp->next;
}
temp->next = temp2;
temp->next = head;
head = temp2;
return head;
}

最佳答案

您的问题是您将变量 head 的实际内存地址传递给您的 InitQueueAddQueue 函数(以便您可以在函数内修改它),但它们被声明为:

node *InitQueue(node *);
node *AddQueue(node *, int);

您的函数需要 node * 而您通过了 node **

当你这样做时:

head = InitQueue(&head);
...
AddQueue(&head, item);
    1. 类型错误。你的编译器提示它而你忽略了
    1. InitQueue 之所以有效,是因为您要返回一些东西。
    1. AddQueue 不起作用,因为它需要一个指向节点的指针,而不是一个指向节点的指针

你应该这样做:

void InitQueue(node **head)
{
(*head) = malloc(sizeof(node));
if (!(*head)) { /* error check */ }
(*head)->next = (*head);
}

现在您可以像调用它一样调用它,但无需返回任何内容。

InitQueue(&head);

您可以用同样的方法修复AddQueue


可能感兴趣

关于c - 传递引用导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32620711/

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