以下の構造体を使用して、学生のリンクリストを作成しようとしています。
struct student
{
int student_ID;
char *student_name;
struct course *courses_enrolled;
Student *child;
};
//Insert student to the list with a given student pointer and the starting point
Student *insert_student(Student *child, Student *root)
{
Student *temp = (Student*)malloc(sizeof(Student));
//if there isn't a starting point, declare this as the start point
if( root->student_name == NULL )
{
root->student_ID = child->student_ID;
root->student_name = strdup(child->student_name;);
root->child = NULL;
}
//if this student's name is before current node, replace node.
else if( strcmp( child->student_name, root->student_name ) < 0 )
{
temp = root;
root = child;
child->child = temp;
}
//if this student's name is after current node, keep doing insert recursion
else if( strcmp( child->student_name, root->student_name ) > 0 )
{
insert_student( child, root->child );
}
return root;
}
最初のルート挿入は常に正常に機能しますが、2 番目のルート挿入を追加しようとすると、insert_student への 2 回目の呼び出しの後にプログラムがセグ フォールトになります。比較で失敗する
if( root->student_name == NULL )
ルートの子ノード(ルート->子)にアクセスすることと関係があると思われますが、実際にはわかりません。
p/s: 割り当てを解除していないことはわかっています。別のライブラリを使用する必要があるため、これは一時的なものです。
更新: 余分なコードを削除しました。