진짜 사소한 오류 한가지.

Mr.뉴트리아·2020년 11월 15일
0

42Seoul 삽질노트

목록 보기
6/10
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;
		}
	}
}
profile
뉴트리아는 가시쥐과에 속하는 설치류의 일종이다. 오랫동안 뉴트리아과의 유일종으로 분류했지만, 현재는 가시쥐과에 포함시킨다. 늪너구리, 해리서 또는 코이푸라고도 한다. 뉴트리아는 스페인어로 수달을 의미하고, 출생지 남미에서는 이 종류를 코이푸라고 부른다.

0개의 댓글