터져야 할 때 터지게 만드려고.
애초에 잘못된 주소가 들어오는 경우 우리가 막을 수가 없고 NULL이 유효한 시스템도 있다고 함.
C언어 C89의 표준함수들의 특징은 보통 유효한 값을 대상으로 만들어짐!
따라서 가드를 하지 않았음. 다만 lst함수들의 경우 유효하지 않은 구조체는 쓸 수가 없기 때문에 그냥 가드를 해주었음.
free를 한 포인터를 다시 참조해서 값을 이용하는 경우 문제가 될 수 있음.
해제된 메모리 영역을 가리키고 있는 포인터를 댕글링 포인터라고 하며
메모리 접근 시 예측 불가능한 동작과
접글 불가시 seg fault, 보안 위협이 될 수 있음.
이론상 담을 수 있는 최대로 담을 수 있는 부호가 없는 data type.
%zu %ld로 출력 가능하며 unsigned int와는 좀 다름 64비트 컴퓨터에서는 64bit로 고정되있단 보장이 없음.
따라서 고정된 size_t를 사용!
유닉스 시스템에서는 모든 것이 파일인데
프로세스가 파일에 접근할 때 file descriptor라는 개념을 통해 파일을 열고 닫음.
쉽게 말하면 파일 번호라고 생각하면 됨.
표준 입력, 출력, 에러는 각각 0, 1, 2이다. open함수를 통해 파일에 번호를 부여하고 열고 닫음.
(*lst)했을 때 주소값 변경. swap이나 널포인터를 가리키는 포인터를 가리킬 때 사용!
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;
}
char *const arr : arr의 주소가 상수
const char arr : arr을 참조한 값이 상수
1byte 단위로 초기화를 하기 때문에 0이나 1만 가능!
malloc 의 size_t의 범위를 넘는 값을 메모리에 할당하려고 할 때 오버플로우가 일어나서 에러가 발생하는데 이 때 널을 반환하고 errno로 처리를 해야한다. 근데 errno가 libft에서는 forbidden함수이기 때문에 우리가 처리할 방법이 없다.