析构函数问题+列表显示

时间:2016-02-07 00:05:31

标签: c++ list stl destructor

我有以下代码: 问题是当我在main类型中创建一个列表时:some。    显示列表后,我收到错误分配错误。如果我从类Reteta中评论析构函数,程序就可以运行。你能帮我找到这个bug吗?或者我可能没有很好地显示列表,因此该程序还有其他问题需要处理。 这是代码:

Reteta

1 个答案:

答案 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类提供适当的复制/赋值运算符。