我有作业使用动态分配的内存。我的教授给了我一些指示。使用它们,我编码了下面的代码。随机时间出现错误。在执行复制之前有时出现错误。有时它会复制一个对象而不会复制下一个对象。我不明白我做错了什么。动态分配内存,复制构造函数中的错误
默认的构造
GroceryItem::GroceryItem()
{
item_name = new char[strlen("") + 1];
strcpy(item_name, "");
item_price = 0;
qty_on_hand = 0;
qty_purchased = 0;
};
功能下面是我用它来复制两个对象的拷贝构造函数:
GroceryItem::GroceryItem(const GroceryItem& Grocery_in)
{
item_name = new char[strlen(Grocery_in.item_name) + 1];
strcpy(item_name, Grocery_in.item_name);
item_price = Grocery_in.item_price;
qty_on_hand = Grocery_in.qty_on_hand;
qty_purchased = Grocery_in.qty_purchased;
}
;
下面
被分配新建分配FY opperator
GroceryItem& GroceryItem::operator=(GroceryItem& copy_item)
{
if (this == ©_item)
return *this;
else
{
delete[] item_name;
item_name = new char[strlen(copy_item.item_name)+1];
strcpy(item_name, copy_item.item_name);
item_price = copy_item.item_price;
qty_on_hand = copy_item.qty_on_hand;
qty_purchased = copy_item.qty_purchased;
return *this ; // They are the same
}
}
从函数调用如下当我尝试复制到temp2:
void sort_items(GroceryItem ini_customer_GroceryItem[], int number)
{
int j = 0, k = 0;
GroceryItem temp2;
for (j = 0; j < number - 1; j++) // n-1 passes
{
for (k = number - 1; j < k; k--) // each pass runs one fewer than the preceding one
{
if (ini_customer_GroceryItem[k - 1] > ini_customer_GroceryItem[k])
{
temp2 = ini_customer_GroceryItem[k - 1];
ini_customer_GroceryItem[k - 1] = ini_customer_GroceryItem[k];
ini_customer_GroceryItem[k] = temp2;
}
}
}
}
以下是错误
你的教授是在帮你帮倒忙通过指示你写陈旧的C代码strcpy()和strlen(),而不是花时间教你真正的C++代码,比如'std :: string',它不需要任何这些废话。为了成为一名熟练的C++开发人员,您没有被教授必要的技能。附:我看到复制构造函数没有错。内存损坏很可能发生在其他地方。仅仅因为你的代码在一个特定的地方崩溃了,也就是拷贝构造函数,并不意味着它就是错误所在。请发布[mcve]。 –
这不是一个拷贝构造函数,它是一个赋值操作符,它应该通过const引用来引用它的参数。“ –
”下面的函数是拷贝构造函数“ - 实际上它是赋值操作符。你的拷贝构造函数在哪里? –