如果一个函数在申请了堆内存,并且这个函数可能在多处返回,如何处理堆内存的释放?
鸟类学 2016-06-01 02:16:13 如果一个函数在申请了堆内存,并且这个函数可能在多处返回,如何处理堆内存的释放?
我遇到的问题如下(伪代码):
int funA()
{
unsigned char *pHeap = funB();//funB函数内部申请的堆内存,返回给pHeap,并且申请的内存是一个unsinged char的数组
if(....) return x;
if(....) return y;
//........多种情况都导致funA()返回
}
如果在每次返回的代码前加释放的语句,感觉有些难看。
如果用智能指针 感觉好像有问题,而且这个智能不是维护的一个类对象,我用代码测试了shared_ptr<unsigned char> pSharedHeap,跟踪一下智能指针 的释放,它最后只是用delete 来释放内存,而不是delete[]。这样的话,也是会内存泄漏吧。
我该怎么处理这个问题?
希望论坛的朋友帮帮忙,给些建议。谢谢。