카테고리 없음

Release 빌드에서만 명령어 입력이 되지 않는 현상

hyuckkim 2021. 7. 2. 23:41

발견 :

'도움' 명령어를 입력했지만 아무일도 일어나지 않았다.

대여섯 번 시도하면 한 두번 꼴로 도움말을 출력했다.

 

찾아본 부분 : 

- 함수를 인식하는 부분에서 문제가 생겼을 수 있다고 생각하고 searchDefine()을 확인했다. 정상이었다.

- 아래로 쭉 내려가다가 initFunction()까지만 실행하고 다음은 실행되지 않는다는 것을 확인했다.

- 할당에 실패해서 생기는 오류인 줄 알고 대여섯번의 시도를 하게하는 코드를 만들었다.

의미는 없었다.

문제 : initFunction의 할당 방식이 문제였다.

 - initFunction에서는 여러 부분의 할당이 필요했기 때문에 코드 중복을 피하기 위해 전부 할당하고 하나라도 할당에 실패하면 전부 없애는 함수였는데, 중요한 NULL 체크를 몇 개 빠뜨렸었다.

 

왜 문제였는가 : 

Release용 최적화와 잘못 맞물려 할당하지 않아야 할 코드가 있으면 할당을 시작조차 하지 않는 코드가 되어버렸다.

코드에서는 '할당을 하지 않은 상태'와 NULL을 구분해 사용했는데, 최적화에서는 둘을 같은 상태로 만든 것이다.

 

끝.

 

C언어는 무언가 버그가 생기면 다 내 탓 아니면 마이크로소프트 탓이라는게 좋단 말이지.