Ошибка удаления массива

Так что у меня есть следующий метод класса (вероятно, добавит больше, если требуется):

РЕДАКТИРОВАТЬ 1:
Вот где инициализируется paObject и как он остается, пока не достигнет setCapacity(int c)

template <Object>
ArrayClass<Object>::ArrayClass()
{
_size = 0; //default in case allocation fails
paObject = new Object[ARRAY_CLASS_DEFAULT_SIZE];
if (paObject == NULL)
throw Exception();
_size = ARRAY_CLASS_DEFAULT_SIZE;
}

Может быть важно отметить, что мой класс Vector расширяется (или что-то еще в c ++) ArrayClass: class MyVector: virtual public ArrayClass<Object>{} а потом в

template <class Object>
MyVector<Object>::MyVector() : ArrayClass<Object>()
{
_currSize = 0;
_incFactor = 5;
}

это заставляет вызывать конструктор ArrayClass.

    template <Object >
void MyVector<Object>::setCapacity(int c)
{
int len = _currSize;
if (len > c) len = c;
Object* paNew = new Object[c];
if (paNew == NULL) throw Exception();
for (int i = 0; i < len; i++)
paNew[i] = paObject[i];
if (paObject != NULL)
delete[] paObject;
paObject = paNew;
_size = c;
if (_currSize > len)
_currSize = len;
}

Когда происходит ошибка, значение c 6 и значение _currSize (частная переменная класса int) 1, Также замечательно отметить, что paObject — это указатель класса типа Object (который является шаблоном … и т. Д. И т. Д.), Инициализированный массивом объектов размера 1 к моменту возникновения ошибки (Object* paObject = new Object[1]).

Все выполняется хорошо, пока не достигнет линии delete[] paObject; в этот момент это дает мне Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) ошибка.

Я серьезно не понимаю, что не так.
Помощь будет оценена.

2

Решение

Эта ошибка возникает, когда у вас есть проблема с кучей.
Что-то вроде:

int *a = new char[1];
a[500] = 0;

затем на совершенно не связанном объекте вы получите ошибку delete или же new,

1

Другие решения

Вы не показали нам, где объявлен paObject … или где он (ре) инициализирован …

… но это почти наверняка проблема.

Если вы не инициализировали его в NULL, он может содержать случайный мусор. В этом случае он не будет оцениваться как NULL, и произойдут плохие вещи.

Точно так же, если явно не сбросить его в NULL, то произойдут и плохие вещи.

Конечно, мы даже не знаем, является ли paObject массивом (выделенным с помощью «new []») … потому что вы не показали нам.

НИЖНЯЯ ЛИНИЯ:

1) Убедитесь, что paObject инициализирован перед использованием, и правильно инициализирован перед повторным использованием.

2) Если вы рассматриваете его как объект массива, убедитесь, что он инициализирован как объект массива

3) Также нужно быть осторожным в различиях между «Объектом», «Ссылкой на объект» (&Объект или Объект *), массивы Объектов. В частности, вам необходимо учитывать, когда вы передаете ссылку на существующий объект или когда вы (возможно, непреднамеренно) создаете новый объект.

Эти ссылки должны помочь:

================================================== ================

ДОПОЛНЕНИЕ:

Звучит как ошибка Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) происходит, потому что вы перезаписываете свой массив.

Object* paObject = new Object[1]  // This is really easy to overwrite!

Я не вижу где в коде, который вы пишете в paObject (или пишете в какой-то псевдоним paObject), но я почти уверен, что это проблема.

ПО МОЕМУ МНЕНИЮ…

0

По вопросам рекламы [email protected]