gpt4 book ai didi

c++ - 使用 'delete' 运算符清理内存时出现“调试断言失败”错误

转载 作者:太空宇宙 更新时间:2023-11-04 16:07:53 24 4
gpt4 key购买 nike

我已经尝试了所有方法,但代码不起作用,我不明白为什么。

我有两个类(class)。这是基类:

class Vegetables
{
private:
char *nameStr;
char *countrySrc;
int seasonRd;
public:
Vegetables()
{
cout << "Default constructor for Vegetables" << endl;
nameStr = new char[20];
nameStr = "Unknown";
countrySrc = new char[20];
countrySrc = "Unknown";
seasonRd = -1;
}

virtual ~Vegetables()
{
delete[]nameStr; //Here happens the error (_crtisvalidheappointer(block))
delete[]countrySrc;
cout << "Destructor for Vegetables" << endl;
}
};

它继承了“Inherited Unit”类:

class InhUnit : public Vegetables
{
private:
Delivery delivery_;
Vegetables vegetables;
int quantity;
int price;
int delivPrice;

public:
InhUnit() :Vegetables(),delivery_(OwnCosts), vegetables(), quantity(-1), price(-1), delivPrice(-1)
{
cout << "Default constructor for Inherited Unit" << endl;
}

~InhUnit()
{
cout << "Destructor for Inherited Unit" << endl;
}
};

弹出此错误的原因可能是什么?

最佳答案

这不是你复制字符串的方式,而是使用 strcpy

    Vegetables()
{
cout << "Default constructor for Vegetables" << endl;
nameStr = new char[20];
strcpy(nameStr, "Unknown");
countrySrc = new char[20];
strcpy(countrySrc, "Unknown");
seasonRd = -1;
}

您所做的是分配一些内存并将其分配给指针。然后在下一行中,您将指针分配给指向一个字符串,而不是将该字符串复制到您分配的内存中。

当你调用 delete[] 因为指针没有指向你分配的内存时你得到了一个错误。

关于c++ - 使用 'delete' 运算符清理内存时出现“调试断言失败”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com