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

时间:2015-01-07 18:54:42

标签: c printf

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

非常感谢任何帮助!

编辑:

在我的主要内容中:     BOOK 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将信息添加到&队列以链接到struct book

1 个答案:

答案 0 :(得分:0)

bookDetails()

BOOK b;结束时,bookDetails();超出了范围 你是明智的以太:

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

主(无效)

此行的内容node *queue = NULL; 英文:
将一个新的指针分配给一个节点struct然后,将指针设置为NULL。

当你通过它来自然地查看时,你会得到一些错误,因为你不能使用NULL指针。

struct Node和queue

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

PEEK()

在这里,我喜欢你所做的,以消除所有那些人的需要,但乍一看node *temp = *head;看起来像temp == head远非真相

为什么会崩溃回顾

偷看的是什么(英文):

  • peek获取指向节点struct
  • 的指针
  • 关闭指向节点的第一个指针
  • 指针的差异(使用" - >"表示法)
  • 打印到标准输出。

代替我们传递给窥视的东西(英文):

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

如果您有任何问题,请询问。

祝你好运:)