C error 모음

오젼·2022년 5월 28일
0

error case

목록 보기
1/2

malloc: Incorrect checksum for freed object

minishell(4496,0x10e3d1dc0) malloc: Incorrect checksum for freed object 0x7f949b408320: probably modified after being freed.
Corrupt value: 0x200000000007f949
minishell(4496,0x10e3d1dc0) malloc: *** set a breakpoint in malloc_error_break to debug
/* error case */
void	str_to_token_sub(t_mini *mini, char *str, char *ret)
{
	char	*value;
	char	*s;

	while (*str)
	{
		if (*str == - '$')
		{
			value = search_dollar_value(mini, str);
			s = value;
			while (s && *s)
				*ret++ = *s++;
			free(value);
			str = end_of_dollar(str);
		}
		else if (*str == - '>' || *str == - '<'
			|| *str == - '&' || *str == - '|')
		{
			*str = -(*str);
			*ret++ = *str;
		}
		*ret++ = *str++;
	}
	*ret = '\0';
}
/* fixed case */
void	str_to_token_sub(t_mini *mini, char *str, char *ret)
{
	char	*value;
	char	*s;

	while (*str)
	{
		if (*str == - '$')
		{
			value = search_dollar_value(mini, str);
			s = value;
			while (s && *s)
				*ret++ = *s++;
			free(value);
			str = end_of_dollar(str);
			if (!*str)
				break ;
		}
		else if (*str == - '>' || *str == - '<'
			|| *str == - '&' || *str == - '|')
		{
			*str = -(*str);
			*ret++ = *str;
		}
		*ret++ = *str++;
	}
	*ret = '\0';
}
  • while문 안에서 이미 while문을 탈출할 조건을 건너뛰어서 발생한 메모리 접근 오류.
  • 위의 경우 end_of_dollar로 이미 *str이 널문자로 업데이트가 되었는데 거기서 멈추지 않고 아래 *ret++ = *str++; 문을 통과해버려서 멈춰야 할 곳을 지나쳐버렸다.
  • 반복문의 탈출 조건에 관한 값이 업데이트 되는 곳을 항상 잘 파악해두기

0개의 댓글