何时释放动态内存,如何释放——关于new的问题
程序心声 2014-01-17 11:48:12 大家好,我有一个问题,就是对于我重叠的动态申请的内存空间,该何时释放并如何释放的问题。
情况用以下代码来示例:
ValType* Fun1(int nValue)
{
......
ValType* pValType = new ValType[nValue];
//然后对申请的pValType做处理
......
return pValType;
}
bool Fun2()
{
......
ValType* pValType = new ValType[nValue];
pValType = Fun1(nValue); //接受做过处理的内存空间,来使用
......
return true;
}
//然后第三方模块来调用Fun2()
在以上示例中,我申请了两次内存,第一次申请在Fun1()函数内,把重要信息存入所申请的内存空间。第二次申请,是为了接收上一次所申请的空间,接收后来使用其存储的信息。
既然new了内存空间,就应该释放,否则我怕造成内存泄漏。那么我想问的是,该何时释放呢?
Fun1()函数内,应该不行,因为它要把申请的空间传回上一层,释放了Fun2就接收不到了。
Fun2()吗,我在Fun2实验,一delete程序就崩溃了,判断是因为第三方模块在调用Fun2()时还会使用到这块内存,不能这么快就释放。
而且,即使在Fun2内释放的话,释放的是谁申请的内存,是释放Fun1()申请的内存,还是释放Fun2()申请的内存,delete只能用一次,不可能两者申请的内存都能释放掉吧。
所以,该在哪释放内存呢,是释放一次还是释放两次呢?如何把两次申请的内存都释放掉?如何处理才能保证不会内存泄漏呢?
请大家帮我考虑一下,也请高手指点,谢谢。