私は動的に割り当てられたメモリを使うという宿題があります。私の教授は私にいくつかの指示をしました。それらを使用して、私は以下のコードをコード化しました。ランダムな時間にエラーが発生しています。コピー実行前にエラーが表示されることがあります。時には1つのオブジェクトをコピーし、次のものをコピーしないでください。私が間違っていることを理解していない。以下動的にメモリを割り当て、コピーコンストラクタでエラーが発生する
デフォルトコンストラクタ
GroceryItem::GroceryItem()
{
item_name = new char[strlen("") + 1];
strcpy(item_name, "");
item_price = 0;
qty_on_hand = 0;
qty_purchased = 0;
};
機能は、私は2つのオブジェクトをコピーするのに使用コピーコンストラクタです:
以下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;
}
;
がassigment 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;
}
}
}
}
210は、エラー
あなたの教授はあなたと廃止されたCコードを書くためにあなたを指示することにより、ひどい仕打ちをしていますstrcpy()とstrlen()の代わりに 'std :: string'のような実際のC++コードを教える時間を費やすのではなく、このナンセンスを必要としません。熟練したC++開発者になるために必要なスキルを教えられているわけではありません。 P.S.私はコピーコンストラクタに間違いはないと思う。おそらく、メモリ破損は他の場所で発生します。あなたのコードがある特定の場所、つまりコピーコンストラクタでクラッシュしたからといって、そのバグがどこにあるのかを意味するわけではありません。 [mcve]を投稿してください。 –
これはコピーコンストラクタではなく、代入演算子であり、const参照でその引数を取るべきです。 –
"以下の関数はコピーコンストラクタです" - 実際は代入演算子です。あなたのコピーコンストラクタはどこですか? –