블로그 내에서 다른 포스팅 검색하기기
검색어를 입력해주세요

목차

  1. 메모리동적 할당이란
  2. malloc 함수 원형 설명
  3. 사용자가 입력한 크기만큼 메모리 동적할당 예제
  4. 동적할당 포인터 변수에 문자열 입력 예제
  5. free 함수로 리소스해제 예제

 

 

 

 

 

오늘은 C API 중 메모리를 동적으로 할당하는 방법에 대해 알아보도록 하겠습니다.

 

 

 

 

메모리동적 할당이란

메모리 동적 할당이란 말 그대로 C 코딩중에 내가 원하는 크기를 가진 변수 공간을 만들겠다는 의미입니다. 우리가 흔히 int형 변수의 메모리 공간 크기는 4 byte 인 것을 잘 알 고 있습니다. 그리고 char 형 변수 공간은 1 byte입니다. 자 그런데, 나는 지금부터 변수를 선언할 것인데 이 변수의 크기는 133 byte 공간을 차지하고 싶다.

 

지금 까지 우리가 알고있는 변수 타입중에 133 byte를 가진 변수가 있을까요? 없습니다. 다만 방법은 있습니다. char[133] 배열 변수를 선언하면 133 byte 메모리 공간을 가지게 됩니다. 이런 원리와 동일합니다. 메모리 동적할당이란 연속적으로 나열된 메모리 공간을 새롭게 구성하는 것입니다. 배열과 동일하지만, 배열 변수는 프로그램이 컴파일 되기 이전에 이미 정해져있다면 메모리 동적 할당이란 프로그램이 실행되는 도중에 새롭게 생성되는 공간을 의미합니다.

 

프로그램이 실행되는 도중 생성되는 메모리 공간을 의미한다.

 

 

 

 

 

malloc 함수 원형 설명

void *malloc(size_t size);

 

인자:

  • size: 할당하려는 메모리의 바이트 단위 크기를 나타내는 size_t 형의 정수 값.

반환 값:

  • malloc 함수는 할당된 메모리 블록의 시작 주소를 가리키는 void 포인터 반환.
  • 만약 메모리 할당에 실패하면, NULL 포인터가 반환됨.

설명:

  • malloc 함수는 힙(Heap) 메모리 영역에서 지정된 크기의 메모리 블록을 할당하여 반환합니다.
  • 할당된 메모리는 초기화되지 않으며, 사용하기 전에 필요한 초기화를 수행해야 합니다.
  • 할당된 메모리는 free 함수를 사용하여 명시적으로 해제해야 합니다.

 

 

 

 

 

사용자가 입력한 크기만큼 메모리 동적할당 예제

아래는 외부로부터 사용자에게 바이트 단위의 메모리 동적할당을 위한 크기를 입력받아 동적 할당하는 예제입니다. malloc 함수 인자로 원하는 크기를 정수로 입력하면 됩니다.

 

#include <stdio.h>
#include <stdlib.h>

int main() {
    size_t size;
    
    printf("할당할 메모리 크기를 입력하세요 (바이트 단위): ");
    scanf("%zu", &size);
    
    // 메모리 동적 할당
    void *ptr = malloc(size);
    
    if (ptr == NULL) {
        printf("메모리 할당에 실패했습니다.\n");
        return 1;
    }
    
    printf("메모리 할당 성공! 할당된 메모리의 주소: %p\n", ptr);
    
    // 메모리 할당 해제
    free(ptr);
    
    return 0;
}

 

1024 크기를 가진 공간이 생성되고 첫 주소가 출력된 모습

 

 

 

 

동적할당 포인터 변수에 문자열 입력 예제

다음으로 동적할당한 주소에 문자열을 입력하는 예제입니다. 하지만 반드시 공간크기보다 작게 값을 복사해야하는 것을 주의해야합니다. 만약 공간보다 큰 값을 저장할 경우 예기치 못한 오류가 발생할 수 있습니다.

 

#include <stdio.h>
#include <stdlib.h>

int main() {
    size_t size;
    
    printf("할당할 메모리 크기를 입력하세요 (바이트 단위): ");
    scanf("%zu", &size);
    
    // 메모리 동적 할당
    void *ptr = malloc(size);
    
    if (ptr == NULL) {
        printf("메모리 할당에 실패했습니다.\n");
        return 1;
    }
    
    printf("메모리 할당 성공! 할당된 메모리의 주소: %p\n", ptr);
    
	printf("문자열을 입력해주세요 : ");
    scanf("%s", ptr);
	
	printf("\n입력된 문자열 : %s\n\n", ptr);
	
    // 메모리 할당 해제
    free(ptr);
    
    return 0;
}

 

1024 크기의 공간에 "안녕하세요" 문자열을 입력한 모습

 

 

 

 

free 함수로 리소스해제 예제

마지막으로 malloc 함수로 동적 할당한 공간은 반드시 프로그램 종료 이전에 free 함수로 리소스를 해제해주어야 합니다. 안그러면 메모리 릭이 발생하여 다른 프로그램이 메모리 공간을 사용하지 못해 예기치 못한 오류가 발생할 수 있습니다. 블루스크린 등이 이러한 문제입니다.

 

free(ptr);
반응형


살구엉덩이님의
글이 좋았다면 응원을 보내주세요!