链接列表C程序错误

时间:2014-03-19 15:56:31

标签: c singly-linked-list

我在调试链接列表程序时遇到问题。它只是在前几行之后崩溃我认为它可能是一个scanf问题并经过双重检查但我还是无法让它运行。它在创建新节点的函数中间崩溃。这是函数的代码和主要代码。

std* CreateNode()
{       
    std *newnd;
    char nm[20];
    double g;
    printf("\nCreating node\n");
    printf("\nEnter the student's name:\n");
    scanf("%s", &nm);
    printf ("\nEnter the student's GPA:\n");
    scanf("%lf", &g);
    strcpy( (newnd->name), nm);
    newnd->GPA = g;
    newnd->next = NULL;
    return newnd;
}

int main()
{
    list_head = (std*) malloc( sizeof(std) );
    list_tail=(std*) malloc( sizeof(std) );
    list_tail=(std*) malloc( sizeof(std) );

    list_head=CreateNode();
    A=CreateNode();
    B=CreateNode();
    C=CreateNode();
    PrintList(list_head);
    InsertBeg(A);
    InsertEnd(B);
    InsertMiddle(C);
    PrintList(list_head);
    SearchStudent();
    DeleteMiddle();
    DeleteEnd();
    DeleteBeg();
    PrintList(list_head);
    return 0;
}

当我运行程序时,它在我输入gpa后立即停止执行。

任何帮助都会非常受欢迎我已经尝试了我能想到的一切。 谢谢! :)

2 个答案:

答案 0 :(得分:2)

你宣布

std* newnd;

然而,在尝试访问它的成员之前,你永远不会为它分配内存。

std* newnd = malloc( sizeof *newnd  );

答案 1 :(得分:0)

在你的程序中,

std *newnd;

是一个指针,你在哪里分配内存?你在

中使用了变量而没有为它分配内存
 strcpy( (newnd->name), nm);
 newnd->GPA = g;  
 newnd->next = NULL;

这导致程序崩溃。所以在使用变量之前分配内存。