我有这个功能来打印结果。现在,我正在尝试将名称存储在结构数组中,但由于某种原因,我遇到了分段错误。根据 debbuger 的说法,当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
来初始化指针来分配内存。