在c ++函数中分配的内存

时间:2014-05-02 07:21:10

标签: c++

我的问题是:退出函数时默认情况下,函数内部分配的内存是否取消分配?

例如:

double* calc(int res_size, int max)
{
    double*    p = new double[max];
    double   res = new double[res_size] ;

    // use p to calculate results to be put in res

    return res;
 }

我们是否在为程序的其余部分泄漏内存?

3 个答案:

答案 0 :(得分:0)

是的,p在您失去范围后泄露,我认为您的意思是double* res而不是double res - 如果是这样,那应该没问题,因为您将其传回在堆栈上。

答案 1 :(得分:0)

是的,p在您的情况下泄露。你可能想试试这个:

double* calc(int res_size, int max)
{
    double*    p = new double[max];
    double*   res = new double[res_size] ;

    // use p to calculate results to be put in res

    delete[] p;
    return res;
}

答案 2 :(得分:0)

  

退出函数时默认情况下,在函数内部分配的内存是否取消分配?

是的,如果你使用适当的RAII包装来管理内存/资源,就像这样

#include <memory>

double* calc(int res_size, int max)
{
   std::unique_ptr<double[]> p(new double[max]);
   std::unique_ptr<double[]> res(new double[res_size]);

   // use p to calculate results to be put in res

   return res.release();
   // we're not leaking p, it'll get deleted on function exit
   // we're returning res, which should be managed by the caller accordingly
}
  

我们是否在为程序的其余部分泄漏内存?

是的,对于您发布的功能;不,对于上面的那个。