尝试将结构实例写入文件时遇到分段错误

用户名

我试图将结构写入文件,但在运行时遇到分段错误:

#include<stdio.h>

//just a struct for purposes of demonstration
struct my_struct{
  int prop1;
  int prop2;
};

//writes dummy struct to filename.dat
void writeStruct(){
  FILE *file_pointer;
  file_pointer = fopen("filename.dat","w");

  //define and assign variables to a quick dummy struct
  struct my_struct *this_struct;

  this_struct->prop1=0; //seg faults here!
  this_struct->prop2=1;

  //write struct to file
  fwrite(this_struct, sizeof(*this_struct), 1, file_pointer);

  fclose(file_pointer);

}

int main(){
  writeStruct();
  return 0;
}

谁能帮助我了解seg错误并实现程序的目的?

您仅定义了结构的指针,没有指向任何内存。所以只是不要使用指针:

...
  //define and assign variables to a quick dummy struct
  struct my_struct this_struct;

  this_struct.prop1=0;
  this_struct.prop2=1;

  //write struct to file
  fwrite(&this_struct, sizeof this_struct, 1, file_pointer);
...

或由于需要使用这种方式malloc来分配内存:

...
  //define and assign variables to a quick dummy struct
  struct my_struct *this_struct;

  this_struct = malloc(sizeof *this_struct);
  this_struct->prop1=0;
  this_struct->prop2=1;

  //write struct to file
  fwrite(this_struct, sizeof *this_struct, 1, file_pointer);
...

不要忘记free在指针无法到达之前进行呼叫

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试打印结构时出现分段错误

写入文件时出现C分段错误

尝试将内存分配给结构元素时收到分段错误错误

记录仪尝试打开ofstream时遇到分段错误

尝试将地址复制到结构中时出现分段错误?

将扫描线写入文件 C++ 时出现 libjpeg-turbo 分段错误

将文件指针保存在结构中时出现分段错误

尝试在OSX上运行的VMWare Fusion的Ubuntu实例上尝试设置共享文件夹时遇到错误

用C ++读回结构时将结构写入文件,但值错误

将结构写入文件但读取错误

将数据写入动态数组时出现分段错误

尝试从 .txt 文件复制整数时出现分段错误

热将 TXT 文件转换为结构数组 - 分段错误?

进入结构时的分段错误

读取结构文件的分段错误

尝试在 C++ 中将字符串转换为双精度时遇到分段错误

尝试将数组写入文件时检测到堆栈粉碎错误

将脚本的输出写入文件时遇到麻烦

尝试使用 terraform 输出 csv 文件的内容时遇到错误

将CSV文件写入sqlite3数据库时遇到无法识别的令牌错误

当我尝试写入wxListBox(C ++,wxWidgets,CodeBlocks)时出现SIGSEGV,分段错误

尝试写入文件时 C++ 中的循环错误

尝试写入 json 文件时出现 Fs.writeFile 错误

将文件读入链接列表时出现分段错误

尝试将文件写入数组时运算符 << 错误

在随机条件下在无限while循环内创建读取器和写入器线程时遇到分段错误

Parcelable 在将活动实例作为 putExtra 发送到另一个活动时遇到 IOException 写入可序列化对象错误

当列是“结构”类型时,如何将文件写入 csv?

尝试将cProfile信息写入文件时出错