数组中的内存错误调整大小

Shy*_*ati 2 c++ heap

所以我正在尝试为堆创建一个模板类.我试图不使用任何STL类(教授的规则和诸如此类的东西),而不是使用向量我使用动态分配的数组.但是,当我运行程序并将足够的数据输入堆中以触发调整大小功能时,它会产生一堆内存错误.一些gdb工作将其缩小到这个函数:

template <class T>
T* Heap<T>::resize()
{
    T* temp; //temp variable for storage

    heap_capacity *= 2; //double capacity
    temp = new T[heap_capacity]; //create new enlarged array
    for (int i = 0; i < heap_size; ++i)
    {
        temp[i] = heap_arr[i]; //copy elements from previous array to current
    }
    delete [] heap_arr; //delete old array
    return temp; //return new array
}
Run Code Online (Sandbox Code Playgroud)

相当标准的东西,tbh.它要求T具有赋值运算符,但我使用普通的旧整数进行测试.这不是我第一次编写这段代码,但这是我第一次为模板编写代码.问题出在这个功能上,还是在其他地方?

编辑:我在gdb中使用了更多代码.在为temp分配内存后立即输出程序错误.这很奇怪,因为我对构造函数中的原始heap_array做了同样的事情.我会更多地讨论,但是我的语法错误的"新"声明?heap_capacity是有效的,顺便说一句,所以这不是问题...

jua*_*nza 6

看起来您需要设置heap_arr为指向新的扩展内存.对于这种resize方法来说,处理这个问题肯定是有道理的:

delete [] heap_arr;
heap_arr = temp;
return heap_arr;
Run Code Online (Sandbox Code Playgroud)

你还需要确保它heap_size小于heap_capacity.