【发布时间】:2023-03-29 11:32:02
【问题描述】:
我是一名学生,因此对于没有使用正确的论坛协议,我深表歉意。我已经在这个问题上搜索了几个小时,我的同学都无法提供帮助。我的任务是在 C++ 中创建一个复制构造函数、重载赋值运算符 (=) 和一个析构函数(“三巨头”)来管理堆上的数组。我在 VS13 中写的下面的内容产生了正确的输出,但出现了调试错误: HEAP CORRUPTION DETECTED: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.
}
【问题讨论】:
标签: c++ constructor