关于这个主题有很多主题,但我找不到对我有用的解决方案;每当我尝试更改student_t.member-> name时,我都会遇到分段错误。下面是我需要使用的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 - &gt;名字,我得到了一个分段错误。
GDB表示这是行度[i] .member-&gt; name =“Bob”的结果,但我不明白为什么,我不知道如何有效地改变价值of degrees [i] .member-&gt; name
答案 0 :(得分:2)
哎呀,你设法在这个小程序中放了四个错误。
main()
的签名应为main(int argc, char *argv[])
。 argv是在命令行中找到的数组字符串。 试试这个:
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;
}