Я работаю с тем же кодом из этого code from my previous SO post, но я внес несколько изменений. Моя проблема в том, что у меня есть динамический массив, который я вызываю delete[]
внутри моей перегрузки оператора для конструктора копирования, и я получаю ошибку ниже.Удалить [] вызывает сбой в C++
Исключение, брошенное в 0x0F7063BB (ucrtbased.dll) в Lab3.exe: 0xC0000005: Место обнаружения нарушения доступа 0xCCCCCCBC.
Если для этого исключения имеется обработчик, программа может быть безопасно продолжена.
Может ли кто-нибудь помочь мне понять, почему? Я проверил связанные вопросы, но есть разные ошибки, чем из того, что я вижу, и я не нашел результата в моем поиске в Google. Я использую C++ 11 на визуальной студии 2015.
#include "ListArray.h"
template < typename DataType >
List<DataType>::List (int maxNumber)
{
//maxSize = MAX_LIST_SIZE; maybe???
maxSize = maxNumber;
dataItems = new DataType[maxSize];
size = maxSize - 1;
cursor = 0; // sets cursor to the first value in list
for (; cursor <= size; cursor++)
dataItems[cursor] = 1;
cursor = 0;
}
template < typename DataType >
List<DataType>::List (const List& source)
{
*this = source; // should be handled by copy constructor
}
template < typename DataType >
List<DataType>& List<DataType>::operator= (const List& source)
{
if (this != &source)
{
maxSize = source.maxSize;
size = source.size;
cursor = source.cursor;
delete []dataItems; // clears dataItems, weird run-time error here. Why?
dataItems = new DataType[size];
for (int count = 0; count < size; count++)
dataItems[count] = source.dataItems[count];
}
else
// do nothing, they are the same so no copy is made
return *this;
}
template < typename DataType >
List<DataType>::~List()
{
maxSize = 0;
size = 0;
cursor = -1;
delete[] dataItems;
}
Edit: Первоначально я разместил несколько других неполных функций также часть программы я пытаюсь построить. Я хотел только включить те, которые, как я знаю, порождают мою проблему. Приношу свои извинения за плохой пост.
'if (cursor = size - 1)' Вы уверены, что это условие с назначением верно? – MikeCAT
Ошибка возникает из-за того, что перед инициализацией используется 'dataItems'. Попробуйте инициализировать его до '* this = source;' – MikeCAT
Нет, но мой код даже не доходит так далеко.Он не проходит мимо функции operator =, потому что я тестирую их по порядку – Callat