我有以下代码:
问题是当我在main类型中创建一个列表时:some
。
显示列表后,我收到错误分配错误。如果我从类Reteta
中评论析构函数,程序就可以运行。你能帮我找到这个bug吗?或者我可能没有很好地显示列表,因此该程序还有其他问题需要处理。
这是代码:
Reteta
答案 0 :(得分:0)
这是内存覆盖:
this->denumire = new char[strlen("Fara denumire")];
strcpy(this->denumire, "Fara denumire");
您没有为终止空字符分配空间:
this->denumire = new char[strlen("Fara denumire") + 1];
strcpy(this->denumire, "Fara denumire");
但是,为什么std::string
可用?仅此一项不仅可以减轻这样的错误,而且还不需要为Medicament
类编写赋值运算符,复制构造函数或析构函数。
另一个错误是您的Reteta
类缺少复制构造函数和赋值运算符,因此由于Medicament*
成员而无法安全地复制它。然后,您将此类用作std::list<Reteta>
中的类型。
由于Reteta
无法安全复制,std::list
复制,因此您将进入未定义行为的世界。因此,您必须为Reteta
类提供适当的复制/赋值运算符。