Taking baby-developer steps
2022.01.27. gnl 본문
오늘 목표
- gnlTest 테스터 Mandatory Part통과
- 부분 함수로 나누기(for norminette and better readablity)
- KO 뜨는 케이스 잡기
메모리 누수는 다 잡았으니, 이제 하나로 만들었던 get_next_line 함수를 부분 함수로 나누고, 부분 함수들의 name으로 break포인트를 잡아서 SIGSEGV를 먼저 잡고, KO 케이스를 잡으면 될 것 같다.- SIGSEGV : 현재 SIGSEGV가 나는 테스트 케이스들의 공통점은 파일의 끝(eof)직전에 개행문자'\n'가 온다는 공통점이 있다.- KO : 구현 때부터 우려했던 stdin에서 난다. stdin에서 eof(cntrl + d)를 어떻게 탐지할지가 계속 고민이다.
오늘 한일
- 부분 함수로 나누기(for norminette and better readablity)
get_a_line()이라는 부분 함수로 나누고 싶었는데, segfault가 발생한다. 아무래도 도중에 할당문이 있다보니 넘겨주는 포인터에서 실수를 한거 같다.
-->curr_buffer를 넘겨 받을 때 char*으로 받았더니, 새로 만든 부분함수 get_a_line 내에서 while문을 돌면서 개행문자가 나오기 전까진 계속해서 curr_buffer가 이어붙여졌어야 했는데 그게 잘 되지 않았다. char**형으로 넘겨 받음으로서 문제를 해결 했다.
메모
- 오랜만에 norm이 내 발목을 잡았다..! 바로 가로줄 too long과 25줄 함수 길이 제한..! 가독성 좋게 하고 싶어서 선언한 변수도 줄이고, 무엇보다 함수 이름을 바꾸면서 문제를 해결했다.
이전 C표준 라이브러리를 구현하는 과제에서 만든 ft_strchr()(manual 기준, strchr()와 동일하게 작동한다)를 그대로 가져와서 썼었는데, 그러다 보니 가로줄 제한에서 아주 큰 몫을 차지했다! 어떻게 가로줄을 줄일지 보고 있는데, 마침 이 함수를 쓸 때가 문자열 내에 개행문자('\n', LF라고도 함)가 있는지를 확인 할 때 뿐이어서, 함수의 이름도 살짝 줄이고, 두번째 인자를 받지 않게 함으로서 가로줄을 줄일 수 있었다. -> 두번째 인자를 받지 않음으로서, if조건문도 하나 줄게 되었다.-> 굳이 여러 케이스에 대해 쓰지 않을 함수는 딱 제 역할만 하게끔 만드는게 좋겠다 하는 생각도 들었다.
'Logs > 학습 log' 카테고리의 다른 글
2022.02.02. gnl 메모리 해제, KO 케이스들 (0) | 2022.02.02 |
---|---|
2022.02.01. gnl & lldb (0) | 2022.01.29 |
2022.01.26. gnl과제 하는 중... (0) | 2022.01.26 |
2022.01.25. 학습 log (0) | 2022.01.25 |
2022.01.24. 학습 log (0) | 2022.01.24 |
Comments