2016-06-15 2 views
1

Идея функции состоит в том, чтобы разделить исходный список в X. Списки объединяются в один массив без удаления или создания новых ячеек. Функции делать свою работу великолепно, но когда я проверить течи Valgrind или доктора-память, кажется, есть некоторые проблемы утечки ...Утечка памяти со списками C++

List* function (List & todivide, int t = 2){ 
    Cell* aux = todivide.l;  // l is the head of the list 
    int tam = (todivide.size()/t == 0) ? todivide.size()/t : todivide.size()/t+1; 
    List* arrayoflists = new List [tam]; 

    for(int i = 0, k = 0; aux != 0; i++){ 
     if(i%t == 0){ 
      arrayoflists[k].l = aux; 
      aux = aux->sig; 
      k++; 
     } 
     if(i%t == t-1){ 
      Cell* p = aux->sig; 
      aux->sig = 0; 
      aux = p; 
     } 
    } 
    l.l = 0; 

    return arrayoflists; 
} 

Я не вижу ничего плохого ... Любые идеи?

Заранее спасибо

+0

Нет ничего плохого в отображаемом коде. Следовательно, утечка должна быть либо в коде, который не показан, либо в комбинации с показанным и не показанным кодом. Чтобы избежать бесполезного траты времени на поиск утечек памяти, узнайте, как использовать 'std :: shared_ptr'. –

+0

Я знаю, что это не связано с основным вопросом, но вы не хотите писать '(todivide.size()% t == 0)'? – StahlRat

ответ

1

Там нет ничего плохого в функции, но так как вы возвращение указатель, созданный с помощью нового, вы можете быть забывание удалить возвращаемый указатель, где когда-либо вы используете его вне функция.

+0

Вы правы, я попытался: «удалить [] arrayoflist» после получения массива в главном, и утечки были исправлены ... Я не понимаю, почему я должен это делать, действительно, я объявил деструктор ... – Bechma

+0

Хм, может быть, что-то случилось в деструкторе. Рад, что вы можете исправить это. – Amposter

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