Taking baby-developer steps
2022.01.25. 학습 log 본문
오늘 목표
- gnlTest 테스터 Mandatory Part통과
- 부분함수로 나누기
- SIGSEGV 잡기
- KO 뜨는 케이스 잡기
메모리 누수는 다 잡았으니, 이제 하나로 만들었던 get_next_line 함수를 부분 함수로 나누고, 부분 함수들의 name으로 break포인트를 잡아서 SIGSEGV를 먼저 잡고, KO 케이스를 잡으면 될 것 같다.
- SIGSEGV : 현재 SIGSEGV가 나는 테스트 케이스들의 공통점은 파일의 끝(eof)직전에 개행문자'\n'가 온다는 공통점이 있다.
- KO : 구현 때부터 우려했던 stdin에서 난다. stdin에서 eof(cntrl + d)를 어떻게 탐지할지가 계속 고민이다.
오늘 한일
- SIGSEGV 잡기
get_next_line 함수를 만들기 시작할 때, static 저장소(buffer[fd])가 비어있을 경우에만 curr_bufferf를 동적할당하는 부분이 있었는데, 수정하던 중 이부분에 ft_strchr(buffers[fd], '\n') == 0 인 경우가 들어가면서 세그폴트가 발생했다. 이전 호출에서 저장해둔 static 배열 저장소에 개행문자('\n')가 없을 경우에, 이번 gnl함수 호출에서 쓸 curr_buffer를 할당하고 바로 read()시스템 콜로 다음 정보를 불러오려고 했는데, 어차피 밑의 while(1)문에서 curr_buffer에서 strjoin함수와 substr 함수등으로 이전 gnl함수 호출에서 버퍼에 남은 정보를 다루기 때문에, 굳이 저부분에 '이전호출에서 한줄을 반환하고 버퍼에 남아있는 부분에 개행문자가 있는지 없는지'를 검사할 필요가 없다고 판단해서 수정했다. 처음엔 ft_strchr()의 파라미터로 static 지역변수를 넘겨줘서 세그폴트가 나는건가 했는데, 그건 아니였다.
메모
'Logs > 학습 log' 카테고리의 다른 글
2022.01.27. gnl (0) | 2022.01.27 |
---|---|
2022.01.26. gnl과제 하는 중... (0) | 2022.01.26 |
2022.01.24. 학습 log (0) | 2022.01.24 |
자료구조 3 -> 새그먼트 오류 (0) | 2021.04.06 |
C언어_자료구조 - 2. 배열기반 리스트 - 특정한 위치에 원소를 추가하는 addAt()함수 (0) | 2021.04.04 |
Comments