본문 바로가기
컴퓨터 이론/C언어 & 자료구조 & 알고리즘

04. 동적 메모리 할당

by 컴퓨터공부용 2023. 3. 20.

포인터를 모른다면 이번 글을 이해하는데 어려울 수 있으므로, 이전 글을 먼저 보고 오는 것을 추천합니다.

 

Q. 동적 메모리에 관한 문제

10개의 동일한 데이터 타입을 저장할 수 있는 배열을 선언 할 경우 배열의 크기는 10으로 고정하여 선언하게 된다.

만약, N개의 데이터를 저장할 수 있는 배열을 선언해야 할 경우 어떻게 선언해야 할까?


만약 이번 주제인 동적 메모리에 대한 내용을 모른다면 큰 크기를 저장할 수 있는 배열을 선언하여 사용하게 될 것이다.

그럼 동적 메모리를 이용하여 어떻게 선언할 수 있는지 알아보도록 하자.

 

동적 메모리 할당이란?

프로그램 실행 중에 필요한 메모리 공간을 할당하고, 더이상 필요하지 않을 때 다시 반환하는 기능을 수행한다. 이를 위해 C언어에서는 <stdlib.h> 헤더파일 내에서 malloc() 함수를 제공한다. malloc() 함수를 사용하여 할당된 메모리 공간은 프로그램 실행  중에 계속 사용할 수 있다.


malloc() 함수란?

malloc() 함수는 동적으로 메모리를 할당하는 함수이다. malloc 함수를 사용하여 할당된 메모리 블록의 첫 번째 바이트의 주소를 가리키는 포인터 변수를 반환한다. malloc 함수는 아래와 같이 사용한다.

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

int main()
{
    char *str;
    
    str = (char*)malloc(7);
    strcpy(str, "HELLO!");
    printf("%s", str);

    return 0;
}

먼저 문자열을 저장하기 위한 char형 포인터 변수 str을 선언한다. malloc 함수를 사용하여 크기가 7인 메모리 블록을 할당한다. 할당된 메모리 블록에 HELLO!라는 문자열을 복사하고, 이를 출력한다.

 

그럼 이제 이번 글 처음에 있던 문제를 해결 할 수 있을 것이다.

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

int main()
{
    int size;
    char *str;
    
    printf("선언하고 싶은 배열의 크기를 입력해주세요 : ");
    scanf("%d", &size);
    
    str = (char*)malloc(size);
    
    return 0;
}

이와 같이 동적메모리를 할당하게 되면 1바이트 크기를 저장할 수 있는 char형 배열을 크기를 프로그램 내에서 정할 수 있게 된다.

'컴퓨터 이론 > C언어 & 자료구조 & 알고리즘' 카테고리의 다른 글

06. 문자열  (0) 2023.03.21
05. 동적 메모리 할당(2)  (0) 2023.03.20
03. 포인터(2)  (0) 2023.02.14
02. 포인터  (0) 2023.02.13
01. 구조체 (struct, typedef)  (0) 2023.02.10

댓글