Taking baby-developer steps

2022.01.25. 학습 log 본문

Logs/학습 log

2022.01.25. 학습 log

Surin Lee 2022. 1. 25. 11:33

오늘 목표

  • 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 지역변수를 넘겨줘서 세그폴트가 나는건가 했는데, 그건 아니였다. 

 

 

 

 


메모

 

 

 

Comments