用 C 语言编程:更改结构体的成员值会产生段错误


关于

这个主题有很多主题,但我无法找到适合我的解决方案;每当我尝试更改student_t.member->名称时,我都会遇到分段错误。下面是我需要使用的 typedef 结构:

typedef struct degree_t degree_t;
typedef struct student_t student_t;
struct degree_t {
    student_t* member;
    int course_id;
}
struct student_t {
    char* name;
    int age;
}

int main(int argc, char* argv[]) {
    student_t *students = malloc(sizeof(student_t) * 3);
    degree_t *degrees = malloc(sizeof(degree_t));
    for (int i=0; i<3; i++) {
        degrees[i].course_id = 1;
        degrees[i].member->name = "Bob";
    }
    return 0;
}

我可以更改度[i].course_id完全没问题,但是每当我尝试更改度[i].member ->名称时,我都会遇到分段错误。

GDB 表示这是行 degrees[i].member-

>name = "Bob" 的结果,但我不明白为什么,我不知道如何有效地更改 degrees[i].member->name 的值

糟糕,你设法在那个小程序中放置了四个错误。

  1. main()的签名应该是main(int argc, char *argv[]) . argv 是在命令行上找到的字符串数组
  2. 您为一度分配内存,但在 for 循环中初始化其中三个。这会导致堆损坏。
  3. 您不初始化学位>成员,而是使用它。
  4. 您为三个学生分配了内存,但不使用它。

试试这个:

struct degree_t {
  student_t* member;
  int course_id;
}
struct student_t {
   const char* name;
   int age;
}

int main(int argc, char* argv[]) {
  degree_t *degrees = malloc(3 * sizeof(degree_t));
  for (int i=0; i<3; i++) {
      degrees[i].course_id = 1;
      degrees[i].member = malloc(sizeof(student_t));
      degrees[i].member->name = "Bob";
      degrees[i].member->age = 23;
  }
  return 0;
}

相关内容

  • 没有找到相关文章

最新更新