我有打印结果的功能。现在,我尝试将名称存储到结构数组中,但由于某种原因我遇到了段错误。根据调试器的说法,当 pos 仍为 0 时,在第一个条目处会发生段错误;
当我尝试从 races
打印 name
时,它会按预期显示。
race_node print_championship(race_node *races, int num_races, member_node tree_top) {
championship_node championship_array[num_races*PLACES];
int pos=0;
for (int i = 0; i < num_races; i++) {
for (int j = 0; j < PLACES; j++) {
strcpy(championship_array[pos]->name, races[i]->rd_arr[j].name);
pos++;
}
}
}
结构体定义:
typedef struct race_details * race_details_node;
typedef struct race * race_node;
typedef struct championship * championship_node;
typedef struct race{
char date[DATE];
char race_date[RACE_DATE];
int boats_num;
struct race_details * rd_arr;
}race;
typedef struct race_details{
int mem_id;
int points;
char boat_class[BOAT_CLASS];
char name[NAME];
int time;
}race_details;
typedef struct championship{
int total_points;
char boat_name[BOAT_NAME];
char name[NAME];
}championship;
它似乎没有超出数组范围,内存使用似乎也很好,我是否遗漏了一些东西?
最佳答案
championship_node championship_array[num_races*PLACES];
由于championship_node
是指针类型的别名,因此您在此处声明了一个指针数组。它们都没有被初始化;它们都没有指向有效的对象。
因此,当您使用/取消引用其中之一时,您会得到未定义的行为;在你的情况下是段错误。
通常我会就如何解决问题提出建议......但我不确定您想要实现什么(打印功能毕竟不打印?)。您可以使用championship
来代替在堆栈上拥有此类对象的可变大小数组,或者使用malloc
分配内存来初始化指针。
关于c - 读入数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59273753/