8-2. 포인터와 동적 메모리
C 언어에서 포인터와 동적 메모리는 밀접한 관계를 가집니다. 포인터는 메모리 주소를 저장하는 변수로, 동적 메모리 할당을 관리하는 데 필수적입니다.
1. 동적 메모리와 포인터:
동적 메모리 할당의 함수들 (malloc, calloc 등)은 할당된 메모리의 주소를 반환합니다. 이 주소를 저장하고 참조하기 위해 포인터 변수가 필요합니다.
// int 크기의 메모리를 동적으로 할당하고, 그 주소를 포인터 p에 저장
2. 동적 배열:
일반적인 배열은 컴파일 시간에 크기가 결정되지만, 동적 메모리를 사용하면 실행 시간에 배열의 크기를 결정할 수 있습니다.
// 크기가 5인 int 배열을 동적으로 할당
3. 동적 메모리의 해제:
동적으로 할당된 메모리는 자동으로 해제되지 않기 때문에 사용 후에는 free 함수를 사용하여 메모리를 해제해야 합니다.
4. 다중 포인터와 다차원 동적 배열:
다차원 배열을 동적으로 할당하려면 다중 포인터를 사용해야 합니다. 예를 들어, 2차원 배열을 동적으로 할당하려면 다음과 같이 할 수 있습니다.
해제는 내부 포인터부터 시작해야 합니다.
5. 포인터와 메모리 누수:
포인터를 잘못 사용하면 메모리 누수가 발생할 수 있습니다. 예를 들어, 동적으로 할당된 메모리의 주소를 잃어버리면 그 메모리는 해제되지 않고 계속해서 시스템에 남게 됩니다.
// 이 코드는 동적으로 할당된 메모리의 주소를 잃어버리므로 메모리 누수가 발생
포인터와 동적 메모리는 C 언어의 핵심 개념 중 하나입니다. 이를 통해 유연하고 효율적인 프로그램을 작성할 수 있지만, 잘못된 관리는 메모리 누수나 다른 문제를 발생시킬 수 있으므로 주의가 필요합니다.