libft

coh·2022년 7월 18일
0

42seoul

목록 보기
1/3

-code는 깃허브에 있습니다
https://github.com/cheol5/코의 깃허브!

Defense 준비

NULL 가드(x)

터져야 할 때 터지게 만드려고.
애초에 잘못된 주소가 들어오는 경우 우리가 막을 수가 없고 NULL이 유효한 시스템도 있다고 함.
C언어 C89의 표준함수들의 특징은 보통 유효한 값을 대상으로 만들어짐!
따라서 가드를 하지 않았음. 다만 lst함수들의 경우 유효하지 않은 구조체는 쓸 수가 없기 때문에 그냥 가드를 해주었음.

free()와 dangling pointer

free를 한 포인터를 다시 참조해서 값을 이용하는 경우 문제가 될 수 있음.
해제된 메모리 영역을 가리키고 있는 포인터를 댕글링 포인터라고 하며
메모리 접근 시 예측 불가능한 동작과
접글 불가시 seg fault, 보안 위협이 될 수 있음.

size_t

이론상 담을 수 있는 최대로 담을 수 있는 부호가 없는 data type.
%zu %ld로 출력 가능하며 unsigned int와는 좀 다름 64비트 컴퓨터에서는 64bit로 고정되있단 보장이 없음.
따라서 고정된 size_t를 사용!

file descriptor

유닉스 시스템에서는 모든 것이 파일인데
프로세스가 파일에 접근할 때 file descriptor라는 개념을 통해 파일을 열고 닫음.
쉽게 말하면 파일 번호라고 생각하면 됨.
표준 입력, 출력, 에러는 각각 0, 1, 2이다. open함수를 통해 파일에 번호를 부여하고 열고 닫음.

lst에서 이중포인터 사용하는 이유

(*lst)했을 때 주소값 변경. swap이나 널포인터를 가리키는 포인터를 가리킬 때 사용!

lst main문 짜보기

int main()
{
	t_list *lst = ft_lstnew("Cheolho");
	ft_lstadd_front(&lst, ft_lstnew("Hello "));
	while (lst)
	{
		printf("%s", lst->content);
		lst = lst->next;
	}
}

int main()
{
	t_list *a = (t_list *)malloc(sizeof(t_list));
	a->content = a;
	a->next = (t_list *)malloc(sizeof(t_list));
	a->next->next = 0;
}

const 위치에 따라

char *const arr : arr의 주소가 상수
const char
arr : arr을 참조한 값이 상수

memset 을 초기화 할 수 있는 상수는 0이나 -1만 가능!

1byte 단위로 초기화를 하기 때문에 0이나 1만 가능!

calloc

malloc 의 size_t의 범위를 넘는 값을 메모리에 할당하려고 할 때 오버플로우가 일어나서 에러가 발생하는데 이 때 널을 반환하고 errno로 처리를 해야한다. 근데 errno가 libft에서는 forbidden함수이기 때문에 우리가 처리할 방법이 없다.

profile
Written by coh

0개의 댓글