C中链表新手的分段错误帮助



我正在为用户输入的"打印作业"创建一个优先级队列。输入一个字符串,后跟一个空格,然后输入一个数字(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);

相关内容

  • 没有找到相关文章

最新更新