在动态指向对象的数组上插入新元素

时间:2018-05-19 11:07:00

标签: c++ pointers dynamic

我有一个表示数组的类,它包含指向其他类对象的指针。

#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在BinaryHeap类中是Array* heapElements,用
初始化  BinaryHeap构造函数中的heapElements = new Array(); Edge是一个非常简单的类,只包含三个整数值 请不要建议使用std :: vector,整个想法是不使用STL。

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。上面的所有代码都很好用,我的代码中的bug完全不同。
是什么错误导致整个程序在以后崩溃了很多行? 这样:

int** graphMatrix;
graphMatrix = new int*[vertex];
for (i = 0; i < edges; i++) graphMatrix[i] = new int[edges];

如此简单,却又如此有害 这是我的关联矩阵实现的一部分。现在所有崩溃的原因都非常明显 - 尝试写入/读取未分配的内存并导致堆损坏。