以下代码是否会在重复调用时连续增加分配的内存?
void ArrayStorage::merge(int low, int mid, int high)
{
int start = low;
int marker = low;
int secondStart = mid + 1;
temp = new string [high + 1];
//rest of the code
}
如果你知道的话,请与我分享......
答案 0 :(得分:3)
是,因为您没有删除new
分配的内存。
正确的方法是:
void ArrayStorage::merge(int low, int mid, int high)
{
int start = low;
int marker = low;
int secondStart = mid + 1;
temp = new string [high + 1];
//rest of the code
delete[] temp; //free the memory
}
在C ++中,动态分配的对象没有自动内存管理。每次拨打new
或malloc
时(此方法通常用于C),您可以分别通过delete
或free
分配动态存储空间,您负责释放存储空间。在您的情况下,您需要分配一个大小为high + 1
的数组,您需要通过delete[]
释放该数组。
std::vector
更适合,但这取决于你想做什么。查一查。
答案 1 :(得分:2)
是的,除非您每次都删除
分配的内存temp = new string [high + 1];
在你的“其余代码”中。
答案 2 :(得分:1)
当你调用new时,你会从堆中分配内存。这种记忆以两种方式之一释放;第一种方式是有人调用删除它(主要是你或你正在使用的库),其中两个是终止程序。
只是一个迂腐的说明,它最终将停止消耗内存,因为你的系统将停止允许新的工作(有一个上限)。