在指向对象的指针的动态数组上插入新元素
Inserting new element on dynamic array of pointers to objects
我有一个表示数组的类,其中包含指向其他类对象的指针。
#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);
错误。
从我在这里的其他问题中发现的情况来看,我想我对指向类对象的指针的动态数组的理解一定存在缺陷,但是在花了很多时间尝试解决这个问题之后,我已经没有想法了。
我的程序的一般思想是为一些图算法执行时间效率测量,这是 Prim 算法实现的一部分。
导致这种情况的调用堆栈如下所示:
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 类中,在
BinaryHeap 构造函数中使用heapElements = new Array();
初始化。
Edge 是一个非常简单的类,只包含三个整数值。
请不要建议使用std::vector,整个想法是不使用STL。
好的,我已经找到了解决方案。上面的所有代码都运行良好,错误在我的代码中处于完全不同的位置。
是什么问题导致整个程序后来崩溃了很多行?
这:
int** graphMatrix;
graphMatrix = new int*[vertex];
for (i = 0; i < edges; i++) graphMatrix[i] = new int[edges];
如此简单,却如此有害。
这是我的发病率矩阵实现的一部分。现在所有崩溃的原因都很明显 - 尝试写入/读取未分配的内存并导致堆损坏。
相关文章:
- 静态堆栈函数不会 1) 输入第一个元素 2)添加新元素时识别旧元素
- 在二叉搜索树中插入新元素
- 如何输入数组的元素,每次获得新元素时,我们将其放在数组的中间?
- 将新元素添加到列表中,并返回对该元素的引用?
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 插入新键时,它会更改现有键值的地址吗?
- 向 std::list 添加新元素的复杂性
- 如何将 n 个连续元素插入到元素类型不可复制的 std::vector 中?
- 在指向对象的指针的动态数组上插入新元素
- 新元素将在std :: set中插入哪里
- 在unordered_map/unordered_set中插入/放置新元素时的提示
- 插入新元素时结束迭代器会获得更新
- 如何重新组合地图并将元素插入新地图
- 使用支撑的init列表在向量中插入新元素
- 将新元素插入哈希表
- 我可以让 std::list 按顺序插入新元素吗?或者必须使用std::sort
- 在 stl 映射中插入新项目时,将覆盖到第一个元素
- 插入一个新元素unordered_set:提示应该是 end()
- 在运行递归函数时将新元素插入向量时出现问题
- 使用memcpy移动数组并在给定位置插入一个新元素