공부

💾 [C언어]들어는봤다!! 동적 할당 메모리 malloc과 free

projectlim 2025. 3. 16. 18:46
728x90
반응형
SMALL

오늘은 C언어 공부하면서 들어는 봤지만 잘 이해 안간걸 설명해 보고자 합니다.

1. malloc 메모리 할당: 동적 메모리의 시작! 🧠💻

동적 메모리 할당이란? 🤔

C 언어에서 malloc은 동적으로 메모리를 할당하는 함수입니다.

동적 메모리 할당이란 프로그램 실행 중에 필요한 메모리 공간을 실시간으로 할당하는 방식입니다.

이 메모리는 힙(heap) 영역에서 할당되며, 프로그램이 종료될 때까지 명시적으로 해제하지 않으면 계속해서 사용됩니다.

malloc의 기본 사용법 📝

malloc은 메모리 할당을 요청하고, 그 메모리의 시작 주소를 반환합니다.

만약 메모리 할당에 실패하면 NULL을 반환합니다.

 

구문:

void* malloc(size_t size);

예시

int *ptr = (int*)malloc(5 * sizeof(int));  // 5개의 int 크기를 동적으로 할당
if (ptr == NULL) {
    printf("메모리 할당 실패!\n");
}

 

malloc 사용 시 주의점 ⚠️

  • 초기화되지 않음: malloc으로 할당된 메모리는 초기화되지 않으며, 쓰레기 값이 있을 수 있습니다. 따라서 값을 넣기 전에 반드시 초기화가 필요합니다.
  • 메모리 크기: 할당하려는 메모리의 크기를 정확히 지정해야 합니다. 예를 들어, sizeof(int)를 사용하여 각 타입의 크기를 계산하는 것이 좋습니다.

malloc의 특징

특징 설명

메모리 크기 malloc(size)로 원하는 크기만큼 할당
초기값 할당된 메모리는 초기화되지 않음
반환 값 할당된 메모리의 시작 주소 반환, 실패 시 NULL
메모리 영역 힙(Heap) 영역에서 할당됨

언제 malloc을 사용하나요? 🧐

  • 동적으로 크기가 변하는 배열: 배열의 크기가 미리 정해져 있지 않고, 실행 중에 결정될 때.
  • 동적 객체 생성: 구조체나 객체의 동적 할당이 필요할 때.

2. free 메모리 해제: 자원을 아끼는 방법 🧹💾

동적 메모리 해제란? 🔑

free는 동적으로 할당된 메모리해제하는 함수입니다.

malloc으로 할당된 메모리를 사용한 후에는 반드시 free로 메모리를 반환해야 합니다.

그렇지 않으면, 메모리 누수(Memory Leak)가 발생하여 시스템 자원이 낭비될 수 있습니다. 🛑

free의 기본 사용법 📝

free는 메모리 주소를 전달하여 해당 메모리 영역을 해제합니다. free를 호출한 후, 해당 포인터는 더 이상 유효하지 않으므로 접근을 피해야 합니다.

 

구문:

void free(void* ptr);

예시

int *ptr = (int*)malloc(5 * sizeof(int));  // 메모리 할당
// 메모리 사용...
free(ptr);  // 메모리 해제

free 사용 시 주의점 ⚠️

  • 이중 해제 금지: 한 번 free된 메모리를 다시 free하면 프로그램이 크래시하거나 예기치 않은 동작이 발생할 수 있습니다.
  • NULL 포인터 안전: free에 NULL을 전달해도 아무 일도 일어나지 않으므로, 포인터가 NULL인지 확인하는 것은 필요하지 않습니다.

free의 특징

특징 설명

메모리 해제 free(ptr)로 동적 할당된 메모리 반환
이중 해제 금지 이미 해제된 메모리를 다시 free하면 오류가 발생할 수 있음
사용 후 포인터 free 후 포인터를 NULL로 설정하는 것이 좋음

언제 free를 사용해야 할까요? 🧐

  • 동적 메모리 사용 후: malloc이나 calloc으로 할당된 메모리를 다 사용한 후에는 free로 반드시 메모리를 해제해야 합니다.
  • 메모리 누수 방지: 프로그램이 종료될 때까지 사용되지 않는 메모리를 반환하여 시스템 자원을 아끼는 것이 중요합니다.

3. malloc과 free: 동적 메모리 관리의 핵심 🔄💡

malloc과 free의 관계 🤝

malloc과 free는 함께 사용되어야 하는 쌍둥이 함수입니다. malloc으로 메모리를 할당하고, 그 메모리를 사용한 후 반드시 free로 메모리를 해제해야 합니다. 이를 통해 효율적인 메모리 관리가 가능합니다.

malloc과 free 함께 사용하기 📝

  • 메모리 할당 (malloc): 프로그램 실행 중에 필요한 메모리 공간을 동적으로 할당합니다.
  • 메모리 해제 (free): 사용이 끝난 메모리를 해제하여 자원 낭비를 방지합니다.

함수 동작 예시

malloc 동적 메모리 할당 int *ptr = (int*)malloc(5 * sizeof(int));
free 동적 메모리 해제 free(ptr);

메모리 누수 방지 🚫

메모리 누수란 동적으로 할당된 메모리를 해제하지 않아서 계속 메모리가 차지되는 현상입니다.

이는 장기적으로 시스템 성능을 저하시킬 수 있으므로, 메모리 할당 후에는 반드시 free를 호출하여 메모리를 해제하는 것이 중요합니다.


malloc과 free 사용 시 체크리스트

  1. malloc으로 메모리를 할당했나요?
  2. 메모리 사용 후 반드시 free로 해제했나요?
  3. free 후, 해당 포인터를 NULL로 설정했나요?

결론 🎯

malloc과 free는 동적 메모리 관리에서 핵심적인 역할을 합니다.

이 두 함수를 제대로 이해하고 사용하면, 더 효율적이고 안정적인 프로그램을 작성할 수 있습니다. 🖥️✨

 

728x90
반응형
LIST