Если вы действительно хотите изменить входной указатель list
, чтобы он указывал на память, выделенную внутри этой функции, то вам нужно объявить функцию как
static int insertSort (linkedlist **list)
, а затем вернуть вновь созданныйсписок из sorted
примерно так:
*list = &sorted;
В существующем состоянии вызов destroylist
освобождает то, что в list
при входе, но назначение только изменяет локальную копию входного указателя.
Другими словами, в вашем исходном коде эта строка:
list = &sorted;
имеет абсолютно нулевой эффект вне функции, но эта строка:
destroythis (list);
действительно свободнадо памяти, которая принадлежала list
на входе.Поэтому после возврата ваш входной указатель теперь получает доступ к пустому списку.