Я студент, поэтому я извиняюсь перед тем, чтобы не использовать правильные протоколы форума. Я искал часы по этой проблеме, ни один из моих одноклассников не может помочь. Мое назначение - создать конструктор копирования, перегруженный оператор присваивания (=) и деструктор («большой три») на 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.
}
Ваши предложения работали! Вы спасатель жизни, спасибо! Должен ли я отмечать этот пост как «ответил»? как это сделать? –
Да, если ответ решает вашу проблему, вы должны пометить его как принятый, установив флажок в верхней левой части ответа. Если вам полезен более одного ответа, вам решать, какой из них заслуживает принятия. Вы также можете отменить ответы, если вам нравится давать вкладчику небольшой бонус. –