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

时间:2015-05-17 00:24:06

标签: c struct fwrite

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

#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故障并达到程序的目的?

3 个答案:

答案 0 :(得分:3)

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

...
  //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

答案 1 :(得分:2)

你没有为结构分配内存,这就是你遇到seg错误的原因。

您还需要在使用之前检查file_pointer。如果文件无法打开,你也会遇到麻烦。

答案 2 :(得分:1)

您将this_struct声明为指针但未初始化它(= new或malloc)。发生段错误是因为未初始化的指针是随机的。

您应该将指针指定给new或malloc对象,或者将其声明为非指针,当您编写它时使用&amp; this_struct。