c - 读入数组时出现段错误

标签 c arrays string struct segmentation-fault

我有打印结果的功能。现在,我尝试将名称存储到结构数组中,但由于某种原因我遇到了段错误。根据调试器的说法,当 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/

相关文章:

C++ STL 删除错误

JavaScript : Replace all character by empty after a specific character

c++ - 如何检查文件是否损坏?

c - 计算由k个有限素数构成的不重复数

c - "&(epage->incoming[0]) = spage;"和 "&(epage->incoming[p2]) = spage;"之间的区别

algorithm - 将数字列表压缩或编码为单个字母数字字符串的最佳方法是什么?

c - 信号量似乎无法在多线程中正常工作

c - 如何创建可变长度的多维数组

arrays - 在 Bash 中将文本文件的内容添加到数组中

javascript - 获取对象数组中键的名称 - JS