尝试将结构实例写入文件时出现分段错误
Getting a segmentation fault while trying to write a struct instance to a file
我正在尝试将结构写入文件,但在 运行 时出现分段错误:
#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;
}
谁能帮我理解段错误并实现程序的目的?
你只定义了一个结构指针,没有指向任何内存。所以不要使用指针:
...
//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
。
你没有为结构分配内存,这就是你遇到段错误的原因。
另外你需要在使用前检查file_pointer。如果文件打开失败,你也会遇到麻烦。
您将 this_struct 声明为指针但未对其进行初始化(= new 或 malloc)。发生段错误是因为未初始化的指针是随机的。
您应该将指针分配给新对象或 malloc 对象,或者将其声明为非指针,并在编写时使用 &this_struct。
我正在尝试将结构写入文件,但在 运行 时出现分段错误:
#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;
}
谁能帮我理解段错误并实现程序的目的?
你只定义了一个结构指针,没有指向任何内存。所以不要使用指针:
...
//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
。
你没有为结构分配内存,这就是你遇到段错误的原因。
另外你需要在使用前检查file_pointer。如果文件打开失败,你也会遇到麻烦。
您将 this_struct 声明为指针但未对其进行初始化(= new 或 malloc)。发生段错误是因为未初始化的指针是随机的。
您应该将指针分配给新对象或 malloc 对象,或者将其声明为非指针,并在编写时使用 &this_struct。