我在调试链接列表程序时遇到问题。它只是在前几行之后崩溃我认为它可能是一个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后立即停止执行。
任何帮助都会非常受欢迎我已经尝试了我能想到的一切。 谢谢! :)
答案 0 :(得分:2)
你宣布
std* newnd;
然而,在尝试访问它的成员之前,你永远不会为它分配内存。
std* newnd = malloc( sizeof *newnd );
答案 1 :(得分:0)
在你的程序中,
std *newnd;
是一个指针,你在哪里分配内存?你在
中使用了变量而没有为它分配内存 strcpy( (newnd->name), nm);
newnd->GPA = g;
newnd->next = NULL;
这导致程序崩溃。所以在使用变量之前分配内存。