Đây chắc là code gốc của bài này:
class ToyBox {
private:
Toy *toyBox[5];
int numberOfItems;
...
Và bạn có dòng này:
*this->toyBox = NULL;
Và các dòng này:
toyBox[numberOfItems]->price = carToy.price;
toyBox[numberOfItems]->price = puzzleToy.price;
Mình thấy bạn nên học lại kiến thức về con trỏ.
Đề cho toyBox
là một mảng chứa con trỏ kiểu Toy
.
Vì vậy dòng *this->toyBox = NULL
hiểu thành this->toyBox[0] = NULL
. :v :V
Không cần thiết vì có biến numberOfItems
rồi, nếu bạn muốn gán bằng NULL
thì hãy gán cho cả mảng, chứ đừng chỉ gán cho phần tử đầu như v. :v
Vì toyBox
là mảng các con trỏ nên toyBox[i]
là một con trỏ, và nó chưa được cấp phát và trỏ đi bất cứ đâu nên bạn truy cập và gán vào this->toyBox[numberOfItems]->price
là UB.
Mà bạn chưa hiểu đa hình là gì rồi. :v :V
Đa hình mà đẻ ra mà lại phải gán giá tiền cho từng sản phẩm như kia thì sinh ra làm gì.
Có thể sửa kiểu bẩn bẩn như này:
toyBox[numberOfItems] = &carToy;
Còn đúng thì bạn phải cấp phát một Toy
mới như này:
toyBox[numberOfItems] = new CarToy(carToy.price, carToy.color);
Ngoài ra thì dùng C++ người ta xài nullptr
chứ không thèm xài NULL
.