p->nil = (node_t *)calloc(1, sizeof(node_t));
컴퓨터 프로그래밍에서, 특히 C언어에서는 메모리를 직접 관리해야 할 때가 많습니다. 메모리를 관리한다는 것은 프로그램이 실행될 때 필요한 데이터를 저장할 공간을 컴퓨터의 메모리에서 "빌려오는" 것을 의미합니다. calloc은 이렇게 필요한 메모리를 빌려오는 함수 중 하나입니다.
calloc 함수는 빌려온 메모리 공간의 "주소"를 알려줍니다. 그런데 이 주소는 void*라는 특별한 형태로 알려주는데, void*는 "모든 종류의 데이터를 저장할 수 있는 메모리 주소"를 의미합니다. 마치 주소가 어떤 상점인데, 그 상점이 무엇을 파는지 아직 정해지지 않은 상태라고 생각할 수 있습니다.
하지만 우리가 원하는 것은 특정한 종류의 데이터, 예를 들어 node_t라는 이름의 특정한 형태의 데이터를 저장할 곳이기 때문에, 이 void* 주소를 node_t*라고 명확히 알려줘야 합니다. 즉, 그 상점이 node_t라는 상품만 파는 전문점임을 알려주는 것과 같습니다.
그래서 (node_t *)라고 적어주는 것입니다. 이것은 "이 주소에는 node_t 형태의 데이터가 들어있다"고 컴퓨터에게 알려주는 방법입니다. 그 결과로, 우리는 이 주소를 사용해서 node_t 데이터를 저장하고 읽을 수 있게 됩니다.
gcc -Wall -g -c driver.c -o driver.o
gcc -Wall -g -c rbtree.c -o rbtree.o
gcc driver.o rbtree.o -o dirver
./driver
이 명령은 소스코드가 있는 동일한 디렉토리에서 실행되어야 하고, 각 단계별로 적절한 파일 경로를 제공해야함.
void swap(int *arg1, int* arg2)
{
int tmp;
tmp = *arg1;
*arg1 = *arg2;
*arg2 = tmp;
}