2013-06-12 3 views
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 без утечки памяти?

ответ

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, даже если вы не копировать его.

+0

Ницца! Это решает мою проблему, спасибо! –

Смежные вопросы