在c++函数内部分配的内存
memory allocated inside a c++ function
我的问题是:在退出函数时,函数内部分配的内存是否默认会释放?
例如:
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
}
我们是在为程序的其余部分泄漏内存吗?
是的,对于你发布的功能;不,对于上面的那个。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配