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

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

#include //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通话。

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

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

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

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