진짜 사소한 오류 한가지.

1104 단어 42SeoulC42Seoul
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;
		}
	}
}

좋은 웹페이지 즐겨찾기