Это потому, что ваши массивы, например STUDENTS s[5] ;
, объявлены в стеке.Когда вы покидаете метод insert_
, они становятся недействительными и опасными для использования.
Вам нужно использовать new
для их распределения, но ваш подход к созданию 5 записей STUDENTS в массиве на самом деле не делаетмного смысла для меня.
Вопрос сводится к собственности.Вы могли бы сказать STUDENTS* s = new STUDENTS[5]
, и то же самое для c
Но тогда вы должны подумать: " кто удалит эту память, которую я выделил? "
Таким образом, лучший подход заключается в том, что каждый узел списка ссылок должен выделять только свой собственный объект STUDENT и CLASS, когда он создается, и должен удалять его, когда он сам уничтожается.
Вы будете рады узнать, что в c ++ 11 есть инструмент, который поможет вам точно сделать так, что std::unique_ptr<STUDENT>
- это указатель на ученика, который автоматически удаляется при уничтожении указателя.В c ++ 14 есть еще лучший инструмент std::make_unique<STUDENT>()
делает экземпляр STUDENT, который вы назначаете указателю.
С другой стороны, в c ++ stl также есть совершенно функциональный класс списка ссылок.