【发布时间】:2019-05-10 16:18:05
【问题描述】:
我创建了两个结构:
typedef struct Student{
int id;
char* name;
int birthYear;
int finishedCourses;
int courseCredits;
double avarage;
int coursesNow;
NodeCourses* courses;
}Student;
typedef struct NodeS{
Student student;
struct NodeS* next;
}NodeS;
所以我现在可以创建学生的链接列表。
我想做的一件事是让用户输入每个学生的详细信息。
所以我创建了一个名为“addNewStudent”的函数
首先在函数中这样做:
NodeS* newStudent;
newStudent=(NodeS*)malloc(sizeof(NodeS));
然后,当我要求用户插入一个名称时,我将它放在一个名为“name”的字符串中,并且我想再次 malloc 名称字符串。 所以我这样做:
newStudent->student.name=(char*)malloc(sizeof(char)*strlen(name));
那条线给了我分段错误。
ps: 我已经检查了字符串是否在写入大小内,并且我得到的是正确的。
我该怎么办?
【问题讨论】:
-
附带说明,请参阅此问题的顶部答案:stackoverflow.com/questions/605845/…
-
另外,假设您正在做看起来正在做的事情,您想分配
sizeof(char) * (strlen(name) + 1),为空终止符留出空间。 -
如果该行给你一个错误,你一定是早先做了一些导致未定义行为的事情,并且它破坏了堆。这可能是因为您没有将名称长度加 1,因此创建以前的学生导致缓冲区溢出。
-
我们需要更多地了解您的程序以了解您的所有问题。
-
请展示你的
put it in a string called "name"
标签: c segmentation-fault