我是一名學生,所以我前面道歉,不使用正確的論壇協議。我已經在這個問題上搜尋了幾個小時,我的同學們都無法提供幫助。我的任務是在C++中創建一個拷貝構造函數,重載賦值操作符(=)和析構函數('三個')來管理堆中的數組。我在VS13中寫下的內容會產生正確的輸出,但我得到一個調試錯誤:檢測到堆損壞:C++ crt檢測到應用程序在堆緩衝區結束後寫入內存 任何人都可以給我一些指導,我甚至不會知道在哪裏看。謝謝!!複製構造函數和重載賦值運算符堆損壞錯誤
//copy constructor
myList::myList(const myList& source){
cout << "Invoking copy constructor." << endl;
array_capacity = source.array_capacity; //shallow copy
elements = source.elements; //shallow copy
delete[] arrayPointer;
arrayPointer = new double(source.array_capacity); //deep copy
for (int i = 0; i < array_capacity; i++) //copy array contents
{
arrayPointer[i] = source.arrayPointer[i];
}
}
//overloaded assignment operator
myList& myList::operator=(const myList& source){
cout << "Invoking overloaded assignment." << endl;
if (this != &source){
array_capacity = source.array_capacity; //shallow copy
elements = source.elements; //shallow copy
delete[] arrayPointer; //delete original array from heap
arrayPointer = new double(array_capacity); //deep copy
for (int i = 0; i < source.array_capacity; i++) {//copy array contents
arrayPointer[i] = source.arrayPointer[i];
}
}
return *this;
}
//destructor
myList::~myList(){
cout << "Destructor invoked."<< endl;
delete[] arrayPointer; // When done, free memory pointed to by myPointer.
arrayPointer = NULL; // Clear myPointer to prevent using invalid memory reference.
}
你的建議奏效!你是一個拯救生命的人,謝謝!我是否應該將此帖標記爲「已回答」?我怎麼做? – 2014-12-08 02:37:59
是的,如果答案解決了您的問題,那麼您應該通過點擊答案左上角的複選框將其標記爲已接受。如果有多個答案有幫助,那麼由您來決定哪一個答案值得接受。如果您想給貢獻者一點紅利,您也可以提出答案。 – 2014-12-08 02:43:44