Сначала я не понимаю, почему вы делаете malloc
в коде, который должен освободить узел.
Далее вы освобождаете не тот узел. Узел, который вы хотели освободить, - это head
- это не temp
.
Попробуйте, например:
void deleteNodeAt(node *head, int pos)
{
if(head==NULL)
return;
node *temp;
int index=0;
while(head!=NULL)
{
if(index==pos-1)
temp=head;
if(index==pos)
{
temp->next=head->next;
free(head);
// Done - the node has been free'd so just return
return;
}
head=head->next;
index++;
}
}
Однако проблема все еще существует.
Рассмотрим это:
Что произойдет, когда pos будет равен нулю (то есть, когда вы попытаетесь удалить текущий head
Ответ: вы будете использовать неинициализированный temp
. Это плохо. Кроме того, как вызывающий абонент узнает, что head
изменился? Вам понадобится дополнительный код для обработки этого случая.