由于 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(使用“->”表示法)
- 段错误。
如果您有任何问题,请尽管提问。
祝你好运:)
我创建了一个程序,该程序使用 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(使用“->”表示法)
- 段错误。
如果您有任何问题,请尽管提问。
祝你好运:)