[C] Realloc을 C로 구현하기
학원에서 배운 C로 Realloc을 구현하는 과정을 이 포스트에다가 저장한다.
void 포인터
int main() {
int a = 3;
double d = 1.2;
int* p = &a;
double* p2 = &d;
void* pv;
// void 포인터는 모든 타입의 주소를 저장할 수 있는 포인터이다.
// 하지만 포인터 타입이 없기 때문에 역참조를 할 수 없다.
pv = &a; // 주소값은 저장가능
pv = &d; // 주소값은 저장가능
return 0;
}
함수를 만들 때 자료가 어떤 타입인지 결정하지 못했고, 주소값만을 저장하고 싶을 때
void* (void 포인터)를 사용한다.
자료 타입이 결정되지 못했기 때문에 역참조에 사용하는 것은 불가능하다.
하지만 realloc과 같은 함수를 구현할 때 매우 유용하다.
realloc함수 구현하기
void* myRealloc(void* block, int size) {
// 기존 array의 시작지점의 주소, 새로 할당할 메모리의 크기를 받아온다.
void* temp = malloc(size);
// 새로 할당될 주소를 저장함.
memcpy(temp, block, size);
// memcpy(도착지 주소, 원래 주소, 크기)
// block에 있던 메모리를 새로운 temp에다가 복사함.
free(block);
// 기존 메모리 해제
return temp;
// 새로운 메모리 주소 반환
}