我的代码有点问题。 实际上,我无法理解为什么在列表中插入时,插入的最后一个元素是在整个列表中根据我的算法是不可能的。 所以我创建了04个课程:学生,笔记,课程,事项。 我在我的文件data.h contents_notes和node:
中创建了两个结构class STUDENTS ;
class CLASSES ;
struct node
{
STUDENTS *students__ ;
CLASSES *classes__ ;
node *next ;
};
node insert_();
在我的data.c文件中,我创建了insert_()函数:
node insert_()
{
node *t = new node() ;
t = NULL ;
int i = 0 ;
STUDENTS s[5] ;
CLASSES c[5] ;
for (i ; i != 5 ; i++)
{
node *i = new node() ;
i->students__ = &s[i] ;
i->classes__ = &c[i] ;
i->next = t ;
t = i ;
}
return *t ;
}
在main.c文件中,我调用了函数insert_:
int main()
{
node x = insert_() ;
//Assuming the class has a property called name
cout<<x.next->students_->name ;
return 0 ;
}
你会发现这些项目不在预期的列表中。 事实上,列表的顶部是列表中的任何位置。 是什么告诉我,因为我没有找到任何解决这个问题的方法
答案 0 :(得分:1)
这是因为您的数组,例如STUDENTS s[5] ;
在堆栈中声明。当您离开insert_
方法时,它们将变得无效且使用起来很危险。
您需要使用new
来分配它们,但是您在数组中创建5个STUDENTS记录的方法对我来说并没有多大意义。
问题归结为所有权。您可以说STUDENTS* s = new STUDENTS[5]
,c
但是,你必须考虑&#34; 谁将删除我分配的内存?&#34;
因此,更好的方法是链接列表的每个节点在创建时应该只分配自己的STUDENT和CLASS对象,并且在自身被销毁时应该删除它。
你会很高兴地知道,c ++ 11有一个工具可以帮助你做到这一点std::unique_ptr<STUDENT>
是指向学生的指针,当指针被销毁时会自动删除。 c ++ 14有一个更好的工具std::make_unique<STUDENT>()
使你分配给指针的STUDENT实例。
另一方面,c ++ stl也有一个功能完善的链接列表类。