由于 printf 语句 C 导致程序崩溃

Program crashing due to printf statement C

我创建了一个程序,该程序使用 linked 列表的指针和节点。我将问题缩小到以下代码行。每次我的程序到达 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;
}

..在主要(无效)中:

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

在其他情况下,我使用 BOOK b 添加信息到 &queue 到 link 来构造 book

bookDetails()

您的 BOOK b;bookDetails();
结束时超出范围 你会明智地使用以太币:

  • 将指向 BOOK 结构的指针传递到 bookDetails
    • 您需要将 return 类型更改为 int 并将其用于错误检查。
  • 为此使用 malloc() 在 bookDetails() 中动态分配一些堆内存
    书结构。
    • 使用完内存后需要#include 和 free()。

主要(无效)

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

当您将其传递给 peek 时,您自然会遇到一些错误,因为您无法引用 NULL 指针。

构造节点和队列

你有一个链表结构的开始,但是,我看到你使用这个指向指针队列的指针。除非您想要多个链表,否则我会说删除队列指针是降低复杂性的好方法。

偷看()

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

为什么崩溃回顾

peek 说的是什么(英文):

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

代入我们传递给 peek 的内容(英文):

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

如果您有任何问题,请尽管提问。

祝你好运:)