Có vẻ mình vẫn chưa luyện tới đỉnh cái operator= này, mời mọi người xem thử và giải đáp giúp:
class Node {
public:
int data;
Node* next;
Node() {
data = 0;
next = NULL;
}
Node(int data) {
this->data = data;
this->next = NULL;
}
};
class CList {
private:
int count;
Node* pHead;
public:
CList() {
count = 0;
pHead = NULL;
}
~CList() {
count = 0;
Node*pTemp = this->pHead;
while (pHead) {
pHead = pHead->next;
delete pTemp;
pTemp = pHead;
}
}
CList(const CList& x) {
Node* pTemp2 = x.pHead;
while (pTemp2) {
Node* pTemp1 = new Node();
pTemp1->data = pTemp2->data;
if (this->pHead == NULL) {
this->pHead = pTemp1;
}
else {
Node* pPos = this->pHead;
while (pPos->next != NULL) {
pPos = pPos->next;
}
pPos->next = pTemp1;
}
pTemp2 = pTemp2->next;
}
this->count = x.count;
}
//Gán LinkedList
CList& operator=(const CList& x) {
if (this->pHead) {
Node*pTemp = this->pHead;
while (this->pHead) {
this->pHead = this->pHead->next;
delete pTemp;
pTemp = this->pHead;
}
}
Node* pTemp2 = x.pHead;
while (pTemp2) {
Node* pTemp1 = new Node();
pTemp1->data = pTemp2->data;
if (this->pHead == NULL) {
this->pHead = pTemp1;
}
else {
Node* pPos = this->pHead;
while (pPos->next != NULL) {
pPos = pPos->next;
}
pPos->next = pTemp1;
}
pTemp2 = pTemp2->next;
}
this->count = x.count;
return *this;
}
//Cộng 2 LinkedList
CList operator+(const CList& x) {
CList re = *this;
re.count += x.count;
Node* pTemp = re.pHead;
while (pTemp->next) {
pTemp = pTemp->next;
}
pTemp->next = x.pHead;
return re;
}
};
Ở hàm main mình cho CList c = a + b thì nó báo lỗi valid heap pointer, mình nghĩ mình nó bị sai ở chỗ operator = và copy constructor (tuy nhiên mình test trường hợp cho CList c = a thì chạy ngon lành không văng lỗi gì cả)…

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?