카테고리 없음

16% 정도의 확률로 프로그램이 종료됨

hyuckkim 2021. 6. 22. 23:15

프로젝트 : 안녕 프로그래밍 언어

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%는 어떻게 실행된거지..

 

끝.