为什么内存泄漏在这段代码中?

时间:2013-06-12 17:51:21

标签: c memory-leaks

我是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

1 个答案:

答案 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。