gpt4 book ai didi

c - 从文件写回结构(也是链表)时出现段错误

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

我在 C 中有两个结构。一个称为 full_file,另一个称为 data_holder。 full_file 包含一个指向 data_holder 的指针,而 data_holder 包含一个指向其自身的指针。我用它来制作一个数字链接列表。

struct full_file {
int magic_number;
struct data_holder *number_list;
};

struct data_holder {
unsigned long int number;
struct data_holder *next;
};

我的问题是,一旦我有了链接列表,并且 full_file.number_list 指向它的第一个元素,我就使用 fwrite() 将 full_file 保存到文件中。

int write_size = fwrite((char *)&numbers,1,sizeof(struct full_file),out_file);
if (write_size != sizeof(struct full_file)) {
fprintf(stderr, "Error: failure to write data into '%s'.\n",out);
exit(8);
}

这似乎不会造成任何问题。但是,当我尝试再次将这些文件内容读入 full_file 时:

struct full_file numbers; 
int read_size = fread((char *)&numbers,1,sizeof(struct full_file),in_file);

存在段错误。我尝试将 sizeof(struct full_file) 更改为 0,并且不会发生此段错误。当然,这意味着不会从文件中检索任何数据。我不知道这里出了什么问题。我该如何解决此错误并读取获取链接列表?

最佳答案

I don't know what's wrong here.

struct full_file numbers; 
int read_size = fread((char *)&numbers,1,sizeof(struct full_file),in_file);

fread 可能产生段错误的唯一原因是 in_file 未初始化,引用 fclosed 文件指针,或者是 NULL

确保检查 fopen 返回(这可能是您用来初始化 in_file 的内容)是否有错误。

其他随机注释:

  • 您将 sizenmemb 参数与 fread 颠倒过来(这并不重要),
  • 您应该将 fread 的结果存储在 size_t 变量中,而不是 int (这里也不重要,但它是一个好习惯)。
  • 将指针存储在磁盘上的文件中(就像您的 fwrite 所做的那样)通常是一个非常糟糕的主意:当您在不同的程序中读回它们时,您不能将它们用于任何用途,或者同一程序的不同运行。

关于c - 从文件写回结构(也是链表)时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956415/

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