我正在为用户输入的"打印作业"创建一个优先级队列。输入一个字符串,后跟一个空格,然后输入一个数字(0-9)作为作业的优先级。一旦输入"NONE",程序就会停止输入,我最终会编写代码,按照作业的优先级打印作业。该代码尚未完成,但已导致分段错误。我已经看了大约两个小时的代码,没有发现任何错误。我也找不到任何可以从中找出问题的问题。我想我只是在做一些愚蠢的事情,看不见。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
int priority;
char *dataString;
struct node *next;
};
struct node *first = NULL;
int main(void)
{
char temporaryPriority;
int i = 0;
while(i != 1)
{
struct node *newNode = malloc(sizeof(struct node));
if (newNode == NULL)
{
exit(EXIT_FAILURE);
}
scanf("%s", (newNode -> dataString));
if ((strcmp((newNode -> dataString), "NONE") != 0) && (strcmp((newNode -> dataString), "none") != 0))
{
scanf(" %c", &temporaryPriority);
(newNode -> priority) = temporaryPriority;
(newNode -> next) = first;
first = newNode;
}
else
{
i = 1;
free(newNode);
}
}
return 0;
}
请将char *dataString;
修改为char dataString[50];
,50
只是一个伪数字,您可以根据自己的场合进行定义。
原因是您执行了scanf("%s", (newNode -> dataString));
,但没有为newNode -> dataString
分配内存。
第二种方式:为节点分配内存:
struct node *newNode = malloc(sizeof(struct node));
newNode->dataString = malloc(sizeof(char) * 20);
释放节点的内存:
free(newNode->dataString);
free(newNode);