gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:09 25 4
gpt4 key购买 nike

所以我正在尝试为堆创建一个模板类。我试图不使用任何 STL 类(教授的规则和诸如此类的东西),所以我没有使用 vector ,而是使用动态分配的数组。但是,当我运行程序并将足够的数据输入到堆中以触发调整大小功能时,它会引发一堆内存错误。一些 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
}

非常标准的东西,说实话。它要求任何 T 都具有赋值运算符,但我正在使用普通的旧整数对其进行测试。这不是我第一次编写此代码,但这是我第一次为模板编写它。问题出在这个功能上,还是其他地方?

编辑:我在 gdb 中更多地研究了代码。在我为 temp 分配内存后,立即出现程序错误。这很奇怪,因为我在构造函数中对原始 heap_array 做了同样的事情。我会再仔细研究一下,但是"new"语句的语法错误吗? heap_capacity 是有效的,顺便说一句,所以这不是问题...

最佳答案

看来需要设置heap_arr指向新的扩充内存。 resize 方法处理这个问题当然有意义:

delete [] heap_arr;
heap_arr = temp;
return heap_arr;

您还需要确保 heap_size 小于 heap_capacity

关于c++ - 数组大小调整中的内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21696177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com