1. FREE
malloc, free 그리고 dangling pointer가 생기는 이유
c 프로그래밍을 좀 해봤다 하는 사람들은 malloc이 메모리 공간을 할당해주는 함수이고, free는 메모리 공간을 해제하는 함수라는 것을 알고 있을 것이다.
80000coding.oopy.io
malloc을 한 후, free를 하여도 free된 주소는 그대로 변수에 남아있어 다시 재 접근 가능하다 (Dangling Pointer)
따라서 다시 재접근 할 이유가 없다면 free한 포인터를 다시 Null로 가르키게 만들어야 완전하게 없앨 수 있다.
또한 할당에 실패한 메모리가 있다면 그 이전에 성공적으로 할당한 메모리도 모두 지워야 누수 없이 깔끔하게 지울 수 있다.
2. lst함수에서 왜 이중 포인터가 필요한가.
과제 중에 lst함수를 구현을 해야했다. 예를 들어 lstadd_back은
void ft_lstadd_back(t_list **lst, t_list *new)
{
t_list *map
if (*lst)
{
tmp = ft_lstlast(*lst);
tmp -> next = new;
}
else
*lst = new;
}
이러한 함수로 구성 되어 있다 왜 인자값으로 이중 포인터가 할당 되는지 이해가 안됐다.
어차피 만약에 첫번째 인자값으로 시작 주소가 주어진다면 굳이 이중이 아니라 일반 포인터로도 lst까지 접근 가능할 텐데 말이다.
그러나 문제는 만약 *lst값이 없는, 시작 주소가 Null이라면 else구문이 실행이 되어 *lst값이 new로 바뀌어야 한다. 그러나 이중으로 주어지지 않는다면 *lst값을 호출한 외부와 연결이 불가능하므로 수정이 이루어지지 않는다.
3. unsigned char 사용
mem과제를 하다보면 메모리 값들을 검사하기 위해 unsigned char 데이터로 형변환을 진행을 해준다.
왜냐하면 unsigned char의 데이터 크기는 1바이트로 가장 작으며 무조건 양수 값을 가지기에 메모리 주소를 검사할 때 가장 정확한 데이터 타입이므로 형변환을 해주어 검사를 진행해준다.
4.아스키가 255까지 있는 이유.
아스키는 char를 나타낼 수 있는 각각의 숫자로 변환한 표이다.
이때 255까지 있는 이유는 char는 8바이트이며 이는 256가지의 조합이 가능하다는 뜻이다. 이러한 조합으로 0부터 255까지의 아스키 테이블이 만들어진다.