Для программы, над которой я работаю, у меня есть двусвязный список. Теперь мне нужно выяснить конкретный узел, в котором определенные данные (называемые id
) становятся отрицательными, а затем разыменовать следующие узлы, а также освободить память. Когда я вызываю эту функцию (вставлено ниже), последний оператор print выполняется и печатается на экране. Однако программа не возвращается в главное. Это просто висит. (Сразу после этого вызова функции у меня есть другой оператор print, который не выполняется, и программа бесконечно зависает)
static void clear_ghosts(particles *plist)
{
particles * temp = plist;
while(temp!=NULL) {
if(temp->p->id < 0)
{
break;
}
temp = temp->next;
}
if(temp)
{
particles * current = temp;
particles * next;
while(current !=NULL)
{
next = current->next;
free(current);
current = next;
}
temp = NULL;
}
printf("\n Finished Clearing \n");
return;
}
Здесь plist
является связанным списком типа struct particle *
. plist
имеет данные p
, которые сами по себе являются структурой и содержат данные-члены, такие как id
и т. Д. Мне нужно пройтись по списку и завершить список, когда встречается отрицательный идентификатор элемента. Я получаю вывод «Завершенная очистка», но функция не возвращается к основной.
Что может быть не так?