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
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';
}
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++; 문을 통과해버려서 멈춰야 할 곳을 지나쳐버렸다.
- 반복문의 탈출 조건에 관한 값이 업데이트 되는 곳을 항상 잘 파악해두기