【发布时间】:2016-05-23 04:59:56
【问题描述】:
当我运行我的 C 程序时出现分段错误,但我不理解它。 我正在从包含学生结构的二进制文件中读取标题。
这是我使用 gdb 运行时遇到的 seg 错误
程序收到信号SIGSEGV,分段错误。 0x0804850f in main () at aidb.c:49 49 }
我的印象是分段错误在第 49 行,但是在第 49 行只有我的 main () 方法的右括号。 这是我的代码,以防万一它有助于澄清事情:
#include<stdio.h>
typedef struct {
char id_chars[4];
int file_size;
int section_table_offset;
int section_count;
} Header;
typedef struct {
int offset;
int num_entries;
int type; // legal value above
} SectionHeader;
int main(void) {
FILE *infile = fopen("file.bin", "r");
Header aidbheader;
//Reads the aidb file header
// fread(aidbheader, sizeof(Header),16, infile);
fread(&aidbheader.id_chars, sizeof(char),4, infile);
fread(&aidbheader.file_size, sizeof(int),1, infile);
fread(&aidbheader.section_table_offset, sizeof(int),1, infile);
fread(&aidbheader.section_count, sizeof(int),1, infile);
SectionHeader table[4];
fread(table, sizeof(SectionHeader), 48, infile);
printf("\nSectionHeader offset: %d \n", table[3].offset);
return 0;
} // this is line 49
【问题讨论】:
-
int id_chars[4];-->char id_chars[4];,fread(table, sizeof(SectionHeader), 48, infile);:48-->4 -
检查你的infile是否为NULL。
-
函数右括号的崩溃(通常是
return语句)通常是由于函数返回地址被覆盖,这通常是由于超出本地数组的边界引起的。 -
你永远不会调用 fclose。
标签: c struct segmentation-fault binaryfiles