0

私は 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

4

1 に答える 1

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 をコピーしない場合でも、常に解放する必要があります。

于 2013-06-12T17:53:41.350 に答える