프로젝트 : 안녕 프로그래밍 언어
https://github.com/hyuckkim/anyoung
hyuckkim/anyoung
Contribute to hyuckkim/anyoung development by creating an account on GitHub.
github.com
발견 :
아무 구문이나 6번 정도 입력하면 한 번 이상 프로그램이 종료되었다.
특히 반복문을 5번 이상 반복하면 거의 항상 프로그램이 종료되었다.
찾아본 부분 :
- 힙이 손상되었다는 오류와 함께 malloc 부분에 오류가 나타나 할당 후 해제되지 않고 버려진 부분이 있는지 조사했다.
수많은 문자열들이 남겨지고 있었고 free()를 추가해주었다. 오류는 그대로였다.
- 며칠동안 그냥 보면서 끙끙 앓았다. 도대체 어디가 문제인거냐....
- 마침내 오늘 어디가 문제인지를 찾아냈다. 문제는 인수를 분할할 때에 있었다.
문제 :
stringLength(&startF[i + 1], '"')로 써야 될 부분을 stringLength(&startF[i], '"')로 썼다.
큰 틀의 비교에 사용된 값을 작은 틀에 그대로 넣었다.
왜 문제였는가 :
일관성을 위해 코드를 앞 뒤로 정리했을 때, 중간에 값이 바뀌는 것을 생각하지 않았었다.
iv가 " 일때 문자열 처리를 시작해 뒤의 "를 받는데, + 1을 뒤로 밀어버려 앞의 "를 보고 문자열이 0개 있다고 반환했다.
문자열을 1개 할당하므로 정상적으로 실행될 수 없을 것이다.
그러면 나머지 84%는 어떻게 실행된거지..
끝.