728x90
문제 상황
위는 제공받은 헤더 파일이다. node와 rbtree 구조체가 선언되어 있는 모습이다.
이 코드의 9,10번 라인이 내가 작성한 코드이다. 이 코드를 make test로 실행시켜 보면 segment fault가 발생했다.
원인
segment fault는 참조할 수 없는 값을 참조하는 경우에 발생한다고 한다.
나는 5번 라인에서 rbtree크기만큼의 calloc를 수행하면 노드 2개(root, nil)가 들어갈만큼의 메모리를 할당받는 줄 알았고, 그 두 노드가 생성되는 줄 알았다.
해결
6번 라인을 통해 p에서 접근할(가질) 수 있는 것은 root와 nil 인데, 이는 각각 다른 노드의 주소를 저장할 수 있는 포인터라, parent나 color같은 속성이 없었다. 따라서 노드 크기의 메모리를 할당받은 다음 nil과 root에 생성한 노드의 주소를 저장해줘야 하는 것이다.
알게 된 것
- 포인터는 어떤 데이터 타입의 포인터든 고정된 길이를 갖는다.
- *p를 타고 가면 rbtree만큼의 메모리가 있다. 그러나 p 자체는 고정된 길이이기 때문에 포인터 변수 앞에 선언되는 타입을 떼고 보면 좀 더 쉽게 느껴진다.
728x90
'SW사관학교 정글 4기' 카테고리의 다른 글
정글 수료 그 후, 무엇을 할까? (2) | 2022.08.26 |
---|---|
[SW 사관학교 정글] Week1 - 특별한 과제 (0) | 2022.04.02 |
[SW사관학교정글] 2일차 - 왜 다들 퇴근을 안 하시나요 (0) | 2022.03.31 |
[SW사관학교정글] 1일차 - 정글 시작!!! (2) | 2022.03.29 |
댓글