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

冥王

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

#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.

heapElementsArray* heapElements的二叉堆类,以初始化内部
heapElements = new Array();BinaryHeap中构造。
Edge 是一个非常简单的类,它只包含三个整数值。
请不要建议使用 std::vector,整个想法是不要使用 STL。

冥王

好的,我找到了解决方案。上面的所有代码都运行良好,该错误在我的代码中位于完全不同的位置。
有什么问题导致整个程序在很多行之后崩溃?
这:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

初始化指向对象数组的指针

来自分类Dev

在C ++中动态声明一个指向对象的指针数组

来自分类Dev

如何将指针引用动态大小的指针指向数组?

来自分类Dev

C ++制作指向const对象的指针数组

来自分类Dev

指向C中动态数组的指针

来自分类Dev

销毁指向数组中对象的指针

来自分类Dev

C指向函数动态数组的指针?

来自分类Dev

在指向对象的指针上使用ostream重载

来自分类Dev

向对象数组中的每个对象添加新元素

来自分类Dev

在对象数组中插入新元素并对数组进行排序

来自分类Dev

指向C ++中对象数组的指针

来自分类Dev

在指向动态声明的数组元素的指针上调用free

来自分类Dev

如何删除指向动态分配对象的指针数组

来自分类Dev

如何指定指向数组元素的成员指针?

来自分类Dev

初始化指向对象数组的指针

来自分类Dev

删除指向对象的指针的指针数组

来自分类Dev

指向对象指针数组的指针的深层复制

来自分类Dev

如何将指针引用动态大小的指针指向数组?

来自分类Dev

指向动态数组的指针,指向数组的指针的动态数组

来自分类Dev

如何在JavaScript上向数组对象添加新元素

来自分类Dev

在Swift中将新元素插入数组

来自分类Dev

C指向函数动态数组的指针?

来自分类Dev

在指向对象的指针上使用ostream重载

来自分类Dev

C ++-创建指向包含类对象指针的数组元素的指针

来自分类Dev

指向数组元素地址的指针

来自分类Dev

创建指向对象的空指针数组

来自分类Dev

C - 指向动态结构数组的指针

来自分类Dev

动态创建新元素

来自分类Dev

动态对象数组与动态指针数组