공부하기/C언어

8-2. 포인터와 동적 메모리

bsarise 2023. 8. 12. 12:50
728x90

C 언어에서 포인터와 동적 메모리는 밀접한 관계를 가집니다. 포인터는 메모리 주소를 저장하는 변수로, 동적 메모리 할당을 관리하는 데 필수적입니다.


    1. 동적 메모리와 포인터:
동적 메모리 할당의 함수들 (malloc, calloc 등)은 할당된 메모리의 주소를 반환합니다. 이 주소를 저장하고 참조하기 위해 포인터 변수가 필요합니다.

  // int 크기의 메모리를 동적으로 할당하고, 그 주소를 포인터 p에 저장

 


    2. 동적 배열:
일반적인 배열은 컴파일 시간에 크기가 결정되지만, 동적 메모리를 사용하면 실행 시간에 배열의 크기를 결정할 수 있습니다.

  // 크기가 5인 int 배열을 동적으로 할당

 


    3. 동적 메모리의 해제:
동적으로 할당된 메모리는 자동으로 해제되지 않기 때문에 사용 후에는 free 함수를 사용하여 메모리를 해제해야 합니다.

 


    4. 다중 포인터와 다차원 동적 배열:
다차원 배열을 동적으로 할당하려면 다중 포인터를 사용해야 합니다. 예를 들어, 2차원 배열을 동적으로 할당하려면 다음과 같이 할 수 있습니다.

해제는 내부 포인터부터 시작해야 합니다.


 


    5. 포인터와 메모리 누수:
포인터를 잘못 사용하면 메모리 누수가 발생할 수 있습니다. 예를 들어, 동적으로 할당된 메모리의 주소를 잃어버리면 그 메모리는 해제되지 않고 계속해서 시스템에 남게 됩니다.

  // 이 코드는 동적으로 할당된 메모리의 주소를 잃어버리므로 메모리 누수가 발생

 

 

포인터와 동적 메모리는 C 언어의 핵심 개념 중 하나입니다. 이를 통해 유연하고 효율적인 프로그램을 작성할 수 있지만, 잘못된 관리는 메모리 누수나 다른 문제를 발생시킬 수 있으므로 주의가 필요합니다.