我是C的新手,我的程序中有内存泄漏。
static int MT_reduce(MT_table** MT)
{
MT_table* newMT = new_MT((*MT)->argc);
/// fill data in the newMT ////
if(isReduced == 1 && newMT->size > 0)
{
MT_free(*MT);
*MT = newMT;
}
return isReduced;
}
在其他地方,我称这个程序为:
while(MT_reduce(&MT)==1);
在分配MT
地址newMT
之前,我正在释放旧资源,但为什么会出现内存泄漏?如何在不泄露内存的情况下用MT
替换newMT
?
答案 0 :(得分:5)
为了避免内存泄漏,您应该按以下方式编辑代码:
static int MT_reduce(MT_table** MT)
{
MT_table* newMT = new_MT((*MT)->argc);
/// fill data in the newMT ////
if(isReduced == 1 && newMT->size > 0)
{
MT_free(*MT);
*MT = newMT;
} else {
MT_free(newMT);
}
return isReduced;
}
即使您不复制它,也应始终免费使用newMT。