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

memory allocated inside a c++ function

本文关键字:内存 分配 内部 c++ 函数      更新时间:2023-10-16

我的问题是:在退出函数时,函数内部分配的内存是否默认会释放?

例如:

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;
 }

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

是的,p是在您失去作用域后泄漏的,我认为您指的是double* res而不是double res——如果是这样,那应该没问题,因为您正在将其传递回堆栈。

是的,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;
}

在退出函数时,函数内部分配的内存是否默认会解除分配?

是的,如果你使用适当的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
}

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

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