c ++中的内存异常

时间:2012-03-23 21:50:31

标签: c++ memory-management

以下代码是否会在重复调用时连续增加分配的内存?

  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
    }

如果你知道的话,请与我分享......

3 个答案:

答案 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 ++中,动态分配的对象没有自动内存管理。每次拨打newmalloc时(此方法通常用于C),您可以分别通过deletefree分配动态存储空间,您负责释放存储空间。在您的情况下,您需要分配一个大小为high + 1的数组,您需要通过delete[]释放该数组。

编辑:正如其他人所指出的那样,也许 std::vector更适合,但这取决于你想做什么。查一查。

答案 1 :(得分:2)

是的,除非您每次都删除

分配的内存
temp = new string [high + 1];

在你的“其余代码”中。

答案 2 :(得分:1)

当你调用new时,你会从堆中分配内存。这种记忆以两种方式之一释放;第一种方式是有人调用删除它(主要是你或你正在使用的库),其中两个是终止程序。

只是一个迂腐的说明,它最终将停止消耗内存,因为你的系统将停止允许新的工作(有一个上限)。