我创建了一个程序,该程序将指针和节点用于链接列表。我将问题缩小到以下代码行。每当我的程序到达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(使用“->”表示法)
段错误。
如果你有问题,就问吧。
祝好运 :)