作为作业的一部分,我正在从一个文件中读取人员名称和ID的程序,并将它们保存在单独的链接列表中。我有一个嵌套的while循环来遍历列表,直到它到达结尾,然后在结尾处分配值。不幸的是,程序在阅读时会一直崩溃,它似乎围绕着第二个while循环。
这是在main()
之前建立的结构struct node
{
char name[50];
int id;
struct node *next;
}*start;
这是函数本身:
void read()
{
int tempNum = 0, id, jack = 0;
char name[50];
struct node *temp, *right;
temp = start;
FILE *ifp = fopen("AssignmentOneInput.txt", "r");
while(fscanf(ifp," %s", &name) != EOF)
{
fscanf(ifp, " %[^,]s, %[^/n]d", &name, &id);
temp = (struct node *)malloc(sizeof(struct node));
strcpy(temp->name,name);
temp->id = id;
right = (struct node *)start;
printf("test number one\n");
while(right->next != NULL)
{
printf("test number two\n");
right = right->next;
}
printf("test number three\n");
right->next = temp;
right = temp;
right->next = NULL;
}
}
至于它在main函数中的实现,它是第一个被调用的函数,所以看起来有点像:
main()
{
read();
答案 0 :(得分:0)
我猜start
是一个全局变量?然后它将由编译器和C运行时系统进行零初始化。这意味着它将作为指针初始化为NULL
。因此,当您在代码中使用未初始化时,它将为NULL
,并且当您取消引用指针时,您有undefined behavior。并且未定义的行为可以说是崩溃的最常见原因。