Ну, вы не опубликовали код для free_list()
или create_node()
, которые являются основными кандидатами на возможные утечки памяти, но я считаю, что ваш код quicksort()
имеет утечку памяти здесь:
less = quicksort(less);
more = quicksort(more); }
если в любом списке есть только один элемент, то этот код:
if (ListLength(list) <= 1) {
node *listCopy;
listCopy = copy_list(list);
return listCopy; }
возвращает копию одного элемента. Установив здесь указатели less
и more
, вы потенциально потеряете один узел.
Рассмотрим список: 2 1 3
Код добавит 1
в список less
и 3
в список more
. Затем он выполнит quicksort()
для этих двух одноэлементных списков, вернет копию списка и потеряет указатели на исходные списки less
и more
, что приведет к утечке памяти из двух узлов.
По совпадению, было бы лучше заменить проверку вышеприведенного оператора if
на:
if (list == NULL || list->next == NULL) {
Это избавляет от необходимости обходить потенциально длинный список, просто чтобы проверить, содержит ли он только 0 или 1 элемент.