gpt4 book ai didi

c - f将双向链表写入二进制文件段错误

转载 作者:行者123 更新时间:2023-11-30 15:22:58 26 4
gpt4 key购买 nike

这是我的学生结构,其中包含我通过二进制读取的信息

   typedef struct student_t {

//data in here

} student_t;

这就是我在 main 中声明它们的方式

double_linkedlist_t* listPtr;
student_t students;
node_t* node = NULLL;

这就是我的文件的初始化方式

FILE *file;
printf("What file would you like to select?\n");
fgets( filename, MAX_NAME_LENGTH, stdin );
strtok(filename, "\n");
fflush(stdin);
file = fopen(filename, "rb+wb");

这就是我的 main.c 中的 fwrite 的样子。我不断遇到段错误,并且我看到的所有有关如何将双向链表写入二进制文件的示例都让您这样做。所以我来这里是为了解释为什么或者也许对我所拥有的进行一些改变。我还在 main 中将双向链表声明为 listPtr,并将我的节点声明为 node。

这是我的初始化

     node_t* Init_Node( student_t data ) 
{
node_t* node = (node_t*) malloc( sizeof( node_t ) );
node -> students = data;
node->nextPtr = NULL;
node->prevPtr = NULL;
return node;
}

这是我的节点结构以及 nodeinit 的原型(prototype)

     typedef struct node_t
{
student_t students;
struct node_t* nextPtr;
struct node_t* prevPtr;
} node_t;

//prototypes
node_t* Init_Node( student_t );


node = listPtr->headPtr; //segmentation faults here
while(node!=NULL)
{
fwrite(node, sizeof(student_t), 1, file);
node=node->nextPtr;
}

任何关于为什么会发生这种情况的帮助将不胜感激,我从未真正写入带有双向链表的二进制文件:/。

最佳答案

由于您没有显示更完整的代码,我只能猜测,但问题是这样的:

double_linkedlist_t* listPtr;

这似乎是在 main 函数内声明的局部变量,问题在于函数内的局部变量未初始化。因此,通过声明而不使指针实际指向某处,它将指向一个看似随机的位置。

未初始化的局部(非静态)变量将具有不确定值,并且取消引用指针而不使其指向任何有效的位置将导致 undefined behavior这是导致崩溃的一个非常常见的原因。

有两种可能的解决方案:

  1. 分配内存并使指针指向它:

    double_linkedlist_t* listPtr = malloc(sizeof *listPtr);
  2. 一开始就不要将其声明为指针,当需要指针时,请使用地址运算符 & 来获取指针:

    double_linkedlist_t list;
    list.headPtr = NULL;
    list.tailPtr = NULL;

    ...

    callSomeFunction(&list);

关于c - f将双向链表写入二进制文件段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955798/

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