У меня есть класс, представляющий массив, содержащий указатели на другие мои объекты класса.
#include "Edge.h"
class Array
{
private:
Edge** _headPtr;
int arraySize;
public:
Array(int);
void pushBack(Edge*);
// other functions...
};
Array::Array(int arraySize)
{
this->arraySize = arraySize;
this->_headPtr = new Edge*[arraySize];
}
Программа всегда возвращает ошибки выделения памяти после вызова
// inserts an element on the end of the array
void Array::pushBack(Edge* element)
{
if (arraySize == 0) {
_headPtr = new Edge*[1];
_headPtr[0] = element;
arraySize++;
}
else {
Edge** _tempPtr = new Edge*[arraySize + 1]; // crashing here
memcpy(_tempPtr, _headPtr, arraySize * sizeof(Edge*));
//for (int i = 0; i < arraySize; i++) delete _headPtr[i];
delete[] _headPtr;
_tempPtr[arraySize] = element;
_headPtr = _tempPtr;
arraySize++;
}
}
Я закомментировал часть for (int i = 0; i < arraySize; i++) delete _headPtr[i];
, поскольку она вызывала ошибку _free_dbg(block, _UNKNOWN_BLOCK);
.
Из того, что я нашел в других вопросах здесь, я предполагаю, что в моем понимании динамического массива указателей на объекты классов должен быть недостаток, но, потратив много времени на попытки исправить это, я исчерпалИдеи.
Общая идея моей программы - выполнить измерения эффективности времени для некоторых алгоритмов графов, что является частью реализации алгоритма Прима.
Стек вызовов, приводящий к этой ситуации, выглядит следующим образом:
BinaryHeap queue = BinaryHeap();
queue.addNewElement(new Edge(v, v2, edgeWeight));
which looks like this
void BinaryHeap::addNewElement(Edge* element)
{
heapElements->pushBack(element);
heapFix_UP(heapElements->getSize()-1);
}
And finally pushBack method.
heapElements
- это Array* heapElements
внутри класса BinaryHeap, инициализированный
heapElements = new Array();
в конструкторе BinaryHeap.
Edge - очень простой класс, содержащий только три целочисленных значения.
Пожалуйста, не предлагайте использовать std:: vector, вся идея не в том, чтобы использовать STL.