[libft] strtrim - pointer being freed was not allocated, bus error

kpk0616·2022년 7월 18일
0

42Seoul

목록 보기
1/2
post-thumbnail

원인

  1. MKO 발생 : malloc할때 사용하는 메모리보다 더 큰 메모리를 할당하면 발생한다. 아래 코드의 경우 if (*s1) return (NULL); 코드에서 NULL을 반환했을 때 pointer being freed was not allocated 라는 에러 메세지가 뜬다. 말 그대로 할당된 메모리가 없는 NULL Pointer인데 free되었을 경우라는 의미이다.
  2. Bus Error 발생 : 주솟값을 올려 주는 변수 타입을 size_t로 작성했을 때 strtrim에 들어가는 인자 s1이 빈 문자열일 경우 언더플로우가 발생해 end가 unsigned int의 최대값인 18446744073709551615 로 들어가게 된다. 따라서 아래 ft_strchr 함수를 동작하는 과정에서 bus error 가 발생하게 된다.

해결

  1. MKO
if (!s1)
	return (NULL);
if (*s1 == 0 || *set == 0)
	return ((char *)s1);

위 코드를 아래와 같이 변경해준다.

if (s1 == 0 || set == 0)
	return ((char *)s1);
  1. bus error : size_t 타입의 변수를 int로 변경해준다.

참고

profile
가능한 한 빨리 틀렸음을 증명하려고 노력합니다.그래야만 발전을 찾을 수 있기 때문입니다.

0개의 댓글