gpt4 book ai didi

c - 尝试使用链接列表运行程序并收到 "Segmentation Fault 11"

转载 作者:行者123 更新时间:2023-11-30 19:07:45 24 4
gpt4 key购买 nike

我目前正在尝试编写一个读取文件的程序,获取第一个数字(这将指示文件中有多少行),然后使用链接列表将值分配给节点(结构)。分配它们后,程序将打印结果。然而,当运行程序时,它输出“段错误 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, "%d\n", &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%d\n", &current->day, &current->month, &current->year);
fgets(current->info, 100, inFile);
printf("%d-%d-%d: %s", current->year, current->month, current->day, current->info);
previous = current;
current = (*current).next;
}
}

有人可以向我解释一下我的内存错误在哪里吗?预先感谢您。

最佳答案

这个:

          current = (*current).next;

完全没有意义,您只分配一个节点,但似乎期望程序能够迭代多个节点。相反,由于您遵循未初始化的指针,因此您会得到未定义的行为。

您必须为需要分配的每个节点调用一次malloc(),并将它们全部链接起来。

顺便说一下,(*current).next 更常见的写法是 current->next

关于c - 尝试使用链接列表运行程序并收到 "Segmentation Fault 11",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46465051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com