목록Logs (43)
Taking baby-developer steps
오늘 목표 가변함수 관련 헤더(stdarg.h)내 함수 공부 va_start va_arg va_copy va_end 오늘 한 일 가변함수 관련 헤더(stdarg.h)내 함수 공부 references: https://www.ibm.com/docs/ko/i/7.4?topic=lf-va-arg-va-copy-va-end-va-start-handle-variable-argument-list / va_arg() – va_copy() – va_end() – va_start() — 가변 인수 리스트 처리 https://docs.microsoft.com/ko-kr/cpp/c-runtime-library/reference/va-arg-va-copy-va-end-va-start?view=msvc-170 / va_arg, ..
오늘 목표 ft_printf()과제 시작하기 printf() 원형함수 조사 (in libc) 공부할 내용 계획 세우기 오늘 한 일 이번 ft_printf 과제는 C 표준 라이브러리에서 제공하는 printf()함수를 따라서(mimic) 구현하는 과제이다. printf()원형함수 조사 -> [오늘 printf() 원형함수 조사를 완전히 다 했다고는 못하겠다! 이렇게 방대한 함수일줄은..!] 터미널에서 "man 3 printf" 명령어로 본 manual중에서, 이번 printf()함수와 관련된 부분만 캡처해서 노션에 붙여놓은건데..! 정말 관련 내용이 많기도 하고, 특히 format관련 옵션들이 많아서 이걸 다 완벽히 공부하고 과제를 시작하려 하면 비효율적일것 같다. 저번 get_next_line 과제 때는 ..
오늘 목표 gnl 직접 테스트 2개 이상의 fd 값에 대하여 교차하여 호출하는 경우 정상작동 테스트 동료평가 3번 완료 gnl 메인 + 보너스 통과하기 오늘 한 일 2개 이상의 fd 값에 대하여 교차하여 호출하는 경우 정상작동 테스트 메인 함수를 작성해서 총 5개의 fd값을 open()함수를 통해 받아들인 후, 각각을 교차 호출하여 개별 호출에 대해서 오류 없이 정상 작동함을 확인하였다. 각각의 gnl 호출 결과 값은 ' |'로 구분해서 출력했다. null은 더이상 읽어들일 내용이 없을때 (eof에 도달했을 때) gnl이 정상적으로 반환하는 캐릭터 포인터 값이다. 동료평가 3번 완료 1시간 간격으로 총 3번의 동료 평가를 완료 하였다. 이번 평가를 해주신 분들은 이미 get_next_line 과제를 수행..
오늘 목표 gnl refactoring gnl 함수 25줄 이하로 줄이기 get_a_line 함수 25줄 이하로 줄이기+할 수 있다면 최대한 뒤에 덕지덕지 붙은 if문 없애기 오늘은 백신 3차를 맞고 와선지 계속 피곤한 느낌이 있어서 잠깐 무리하지 않는 선에서 코드를 보도록하자. 오늘 한 일 gnl 함수 25줄 이하로 줄이기 이 부분중에서 한줄만 줄이면 함가 25줄 미만이 되는데 잘 안되서, 윗 부분에서 가독성을 좀 포기하고, if()~else()문에서 else()문에 들어가는 곳을 문제가 되지 않게 꺼내면 'else' / '{' / '}' 이렇게 3줄을 줄일 수 있어서 그렇게 먼저 수정했다가, 아무래도 else{}문으로 꺼내는게 가독성도 좋을거 같애서 나중에 다시 else{}문을 꺼냈다. 결국에 초반에..
오늘 목표 gnlTest 테스터 Mandatory Part통과 KO 뜨는 케이스 잡기 포인터 할당 해제 관련 문제 해결 오늘 한 일 할당된 메모리 이중 해제 관련 문제 해결 어제 알게된 aliasing(두개 이상의 포인터가 같은 메모리 주소를 가리키는 현상)으로 인해 이미 할당 해제된 메모리 공간을 가리키는 댕글링 포인터가 발생하게 되었고, 이로 인해 이중 할당해제 문제까지 발생했던것과 비슷한 맥락에서, 한줄이 완성 될 때까지(eof 혹은 '\n'를 만날 때까지) 버퍼에 남아있는 문자열을 저장해두는 buffers[fd]포인터에서, 마지막 호출 할 시에, 이번 호출에서 반환할 a_line의 주소값과 동일한 메모리를 가리키는 때가 있음을 확인하였고, 빠른 해결 법으로 a_line을 반환하기 전, buffer..
오늘 목표 gnlTest 테스터 Mandatory Part통과 KO 뜨는 케이스 잡기 포인터 할당 해제 관련 문제 해결 오늘 한 일 어제 계획 세워둔 util 함수들 살펴보기를 진행했으나, substr, strjoin, strlcat, strlcpy 함수 내에서 free 함수를 사용한 적이 없기 때문에 포인터 할당 해제 관련해서 살펴볼 일은 없었다. (+메모리 누수는 없는 상태) 오늘 내로 KO 및 포인터 할당 해제 문제를 해결 못하면 처음 부터 다시 짜보는 것도 고려하고 있다. -> 처음부터 다시 짜는게 빠를것 같긴한데, 지금 내가 이 코드를 디버깅하면서 배울게 많은거 같애서 일단 디버깅을 계속하기로 결정했다. 포인터 할당 해제 관련 문제 해결 아직 포인터가 이중 할당 되는 문제를 잡는 중이지만, 왼쪽..
오늘 목표 LLDB 사용법 익히기 유튜브 강의로 실제 사용하는 법 익히기 gnlTest 테스터 Mandatory Part통과 KO 뜨는 케이스 잡기 오늘 한일 LLDB 사용법 익히기 유튜브 강의로 실제 사용하는 법 익히기 ->lldb 명령어 중, gui 라는 그래픽 기반 명령어를 알게 됬더니 좀더 한줄 한줄 어떤식으로 프로그램이 돌아가고 있는지 보기가 좋았다. 단 컴파일 후, break point를 잡고 꼭 run을 해준 다음에 gui로 넘어가서 next 명령어를 사용해 한줄씩 보면 된다. 사실 break point를 좀 더 잡아서 s 커맨드로 하면 더 편할거 같긴하다. (next 명령어는 한줄씩 다 보는 거라..!) 해결되지 않은 문제점 : 1. gnlTester에서 "pointer being free..
오늘 목표 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 norm..
오늘 목표 gnl함수 부분함수로 나누기 메모리 누수는 다 잡았으니, 이제 하나로 만들었던 get_next_line 함수를 부분 함수로 나누고, 부분 함수들의 name으로 break포인트를 잡아서 SIGSEGV를 먼저 잡고, KO 케이스를 잡으면 될 것 같다. - SIGSEGV : 현재 SIGSEGV가 나는 테스트 케이스들의 공통점은 파일의 끝(eof)직전에 개행문자'\n'가 온다는 공통점이 있다. - KO : 구현 때부터 우려했던 stdin에서 난다. stdin에서 eof(cntrl + d)를 어떻게 탐지할지가 계속 고민이다. 오늘 한일 부분함수로 나누기 -> get_next_line 함수 내에서, 이전 호출에서 버퍼에 남은 문자를 불러오거나, 남은 문자가 없었다면 curr_buffer(이번 gnl함수 ..
오늘 목표 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 ..