我是一名学生,所以我前面道歉,不使用正确的论坛协议。我已经在这个问题上搜寻了几个小时,我的同学们都无法提供帮助。我的任务是在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