void gnl_clear_manager(t_manager **head)
{
t_manager *temp;
t_manager *temp2;
if (head && (*head))
{
temp = (*head);
while (temp)
{
if (temp->buffer == NULL)
{
if (temp->next == NULL)
{
free(temp);
temp = NULL;
break;
}
else
{
temp2 = temp->next;
free(temp);
temp = temp2;
}
}
temp = temp->next;
}
}
}
아무 생각없이 이렇게 코드를 쓰고, 왜 다른 함수에서 해당 노드를 검출되는거지? 라는 생각을 했다.
이게 무지에서 나오는 코드라고 생각하는데, 왜 그렇게 써야하는지 생각하지 않고 공식마냥 따라치니 이런 결과가 나오는 것이다. free(temp)로 주소를 날려줬는데, 왜 temp에 NULL처리를 해주는것인가? 정상적인 코드의 결과는 아래와 같다.
void gnl_clear_manager(t_manager **head)
{
t_manager *temp;
t_manager *temp2;
if (head && (*head))
{
temp = (*head);
while (temp)
{
if (temp->buffer == NULL)
{
if (temp->next == NULL)
{
free(temp);
*head = NULL;
break;
}
else
{
temp2 = temp->next;
free(temp);
temp = temp2;
}
}
temp = temp->next;
}
}
}