此代码有什么问题。在插入操作期间,插入第二个元素时,程序停止,Windows显示程序已停止工作。在构建日志中,它显示Process terminated with status -1073741510
,有时显示Process terminated with status 255
。即使主函数中有返回语句。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void insert(int);
void print();
struct node
{
int data;
struct node *link;
};
struct node *temp, *temp1, *temp2, *head, *end;
int main()
{
int i, ch, a;
head = NULL;
temp = (node*)malloc(sizeof(node));
printf("Enter the number of items");
scanf("%d", &ch);
for(i = 0; i < ch; i++)
{
printf("\nEnter the number");
scanf("%d", &a);
insert(a);
**call to insert**
print();
}
return 0;
}
void insert(int x)
{
temp = (node*)malloc(sizeof(struct node));
temp->data = x;
temp->link = NULL;
temp2 = head;
if(head == NULL)
{
head = temp;
}
else
{
while(temp2 != NULL)
{
temp2 = temp2->link;
}
temp2->link = temp;
}
}
void print()
{
temp1 = head;
printf("\nthe list is:");
while(temp1 != NULL)
{
printf("%d", temp1->data);
temp1 = temp1->link;
}
}
答案 0 :(得分:-1)
这部分功能
else
{
while(temp2 != NULL)
{
temp2 = temp2->link;
}
temp2->link = temp;
}
错了。退出循环后,节点temp2
等于NULL。因此这句话
temp2->link = temp;
导致未定义的行为。
按以下方式更改代码段
else
{
while(temp2->link != NULL)
{
temp2 = temp2->link;
}
temp2->link = temp;
}
也是主要
中的这个陈述temp = (node*)malloc(sizeof(node));
没有意义,导致内存泄漏。
除变量head
之外的全局变量的这些声明struct node *temp, *temp1, *temp2, *head, *end;
也没有意义。