C语言 读入数组时的分段错误



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

相关内容

  • 没有找到相关文章

最新更新