[c언어] 포인터와 메모리 해제

프로그래밍을 할 때 메모리 관리는 매우 중요합니다. 특히 C 언어에서는 메모리를 수동으로 할당하고 해제해야 합니다. 이러한 작업을 효율적으로 처리하기 위해 포인터를 사용합니다. 포인터를 제대로 이해하고 메모리를 해제하는 방법을 알아보겠습니다.


포인터란?

포인터는 다른 변수의 메모리 주소를 저장하는 변수입니다. 메모리 주소를 저장하고 해당 주소에 직접 접근하여 값을 변경할 수 있습니다. 이는 특히 동적 메모리 할당과 관련하여 유용하게 활용됩니다.

int main() {
    int num = 10;
    int *ptr = #  // 포인터 변수 ptr은 num의 주소를 저장
    *ptr = 20;  // ptr이 가리키는 주소의 값을 20으로 변경
    printf("%d", num);  // 20이 출력됨
    return 0;
}

위의 예시에서 ptrnum의 주소를 저장하고 있으며 *ptr을 사용하여 해당 주소의 값을 변경할 수 있습니다.


메모리 해제

동적으로 메모리를 할당하게 되면 적절한 시점에 메모리를 해제해야 합니다. 메모리를 해제하지 않으면 시스템에 메모리 누수가 발생할 수 있습니다.

C에서는 free() 함수를 사용하여 동적으로 할당된 메모리를 해제합니다.

int main() {
    int *ptr = (int *)malloc(sizeof(int));  // 메모리 할당
    *ptr = 10;
    free(ptr);  // 메모리 해제
    return 0;
}

malloc() 함수를 사용하여 메모리를 할당한 후 사용하고 난 뒤에는 반드시 free() 함수를 호출하여 해당 메모리를 해제해야 합니다.


결론

포인터를 사용하여 메모리 주소를 직접 조작하고 할당된 메모리를 해제할 수 있는 것은 C 언어의 가장 강력한 기능 중 하나입니다. 하지만 이를 잘못 다룰 경우 메모리 누수와 같은 심각한 문제를 초래할 수 있으므로 신중하게 다루어야 합니다.