진짜 사소한 오류 한가지.
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;
}
}
}
Author And Source
이 문제에 관하여(진짜 사소한 오류 한가지.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@main_door/진짜-사소한-오류-한가지저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)