我当前正在尝试编写一个读取文件,第一个数字的程序(这将指示文件中有多少行),然后使用链接列表,分配节点的值(结构)。分配它们后,该程序将打印结果。但是,运行程序时,它会输出"分割故障11"。这是我的程序:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int day;
int month;
int year;
char info[100];
struct node *next;
};
int main(int argc, char* argv[])
{
FILE* inFile = fopen(argv[2], "r");
int checking, amount, i;
checking = fscanf(inFile, "%dn", &amount);
if (checking != 1)
{
printf("Error reading the 1st line");
}
int amountupdated = (amount-1)/2;
typedef struct node NODE;
NODE *head, *first, *temp, *current, *previous = 0;
head = (NODE *)malloc(sizeof(NODE));
current = head;
previous = NULL;
for(i=0; i<amountupdated; i++)
{
fscanf(inFile, "%d%d%dn", ¤t->day, ¤t->month, ¤t->year);
fgets(current->info, 100, inFile);
printf("%d-%d-%d: %s", current->year, current->month, current->day, current->info);
previous = current;
current = (*current).next;
}
}
有人可以向我解释我的记忆错误在哪里。预先感谢您。
this:
current = (*current).next;
根本没有任何意义,您只能分配一个节点,但似乎希望该程序能够迭代多个节点。相反,由于您正在遵循非初始化的指针,因此您会获得不确定的行为。
您将不得不致电malloc()
一次以分配每个节点,然后将它们全部链接起来。
顺便说一句,(*current).next
通常是书面的current->next
。