所以我正在尝试为堆创建一个模板类.我试图不使用任何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是有效的,顺便说一句,所以这不是问题...
看起来您需要设置heap_arr为指向新的扩展内存.对于这种resize方法来说,处理这个问题肯定是有道理的:
delete [] heap_arr;
heap_arr = temp;
return heap_arr;
Run Code Online (Sandbox Code Playgroud)
你还需要确保它heap_size小于heap_capacity.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |