我创建了一个程序,该程序将指针和节点用于链接列表。我将问题缩小到以下代码行。每当我的程序到达printf部分时,它就会崩溃。

typedef struct book {

char title[50];
char author[50];

}BOOK;


typedef struct Node {

struct Node* next;
BOOK info;
int priority;

}node;


我将问题缩小到以下代码行。每当我的程序到达printf部分时,它就会崩溃。

void peek(node **head) {

    node *temp = *head;

    printf("%s by %s has been peeked.",temp -> info.title , temp -> info.author);
}


任何帮助是极大的赞赏!

编辑:

在我的主要我有:
    预订bookDetails(){

BOOK b;

printf("\nEnter book title: ");
fflush(stdout);
scanf("%s", b.title);

printf("\nEnter the author: ");
fflush(stdout);
scanf("%s",b.author);

return b;
}


..和main(void)中:

node *queue = NULL;
case 4: peek(&queue);
        break;


在其他情况下,我使用BOOK b将信息添加到&queue中以链接到结构书

最佳答案

bookDetails()

您的BOOK b;bookDetails();末尾超出范围
你最好以太:


将指向BOOK结构的指针传递给bookDetails

您需要将返回类型更改为int并将其用于错误检查。

为此,在带有malloc()的bookDetails()内部动态分配一些堆内存
书籍结构。

完成内存操作后,需要#include和free()。



主(无效)

这行做什么node *queue = NULL;
用英语:
在堆栈上为节点结构分配一个新的指针,然后将指针设置为NULL。

当您自然地将其传递给窥视时,您将得到一些错误,因为您不能引用NULL指针。

结构节点和队列

您已经有了Node链表结构的开始,但是,我看到您正在使用此指针指向指针队列。除非您想要多个链接列表,否则我会说删除队列指针对于降低复杂性是一件好事。

窥视()

在这里,我喜欢您为消除所有这些需要而做的事情,但是乍一看node *temp = *head;看起来像temp == head,这与事实相去甚远

为什么它崩溃回顾

偷看说了什么(用英语):


peek获取一个指向节点结构的指针
删除指向节点的第一个指针
指针的区别(使用“->”表示法)
打印到标准输出。


替代我们传递给窥视的内容(英语):


窥视收到NULL(0x0)
创建一个名为temp的节点结构指针,并将NULL放入指针中。
尝试访问地址0x0(使用“->”表示法)
段错误。


如果你有问题,就问吧。

祝好运 :)

10-06 01:50