[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;
    // 새로운 메모리 주소 반환
}

© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2