C언어 동적 메모리 할당
C언어

C언어 동적 메모리 할당

오늘은 동적 메모리 할당에 대해 정리를 해보겠습니다.

 

일단 동적 메모리 할당을 위해서는 필요한 헤더 파일이 있습니다.

#include <stdlib.h>

 

malloc이라는 함수를  쓰기 위해서는 <stdlib.h> 헤더 파일이

필수적으로 필요하기 합니다.

 

그리고 필요한 함수들도 있습니다.

1. 포인터 변수 = malloc( 메모리 크기 )

// 위 형식은 유동적으로 사용 가능하다.

 

2. free( 포인터 변수 )

 

바로 예제를 보겠습니다.

 

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int a;
    scanf("%d", &a);

    int *p1 = (int*)malloc(sizeof(int)*a);

    for (int i = 0; i < a; i++)
    {
        p1[i] = i;
    }

    for (int i = 0; i < a; i++)
    {
        printf("%d\n", p1[i]);
    }

    free(p1);

    return 0;
}

하나하나 뜯어서 보겠습니다.

 

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

위에서 말했듯 동적 메모리 할당을 위해 사용해야 하는 

malloc 함수는 <stdlib.h>에 포함되어 있습니다. 

 

* malloc 함수를 쓰기 위해서는 #include <stdlib.h>를 작성해야합니다. *

 

int *p1 = (int *) /*형 변환*/ malloc(sizeof(int)/* int 의 크기 */ * a);

p1이라는 포인터 변수를 int 형으로 만들어줍니다.

(int *)는 int로 형 변환을 해야지 자료형이 일치합니다.

sizeof(int) * a 는 int형의 사이즈만큼 입력받은 변수 a개 만큼 메모리 할당을 하는 것입니다.

 

for (int i = 0; i < a; i++)
    {
        p1[i] = i;
    }

포인터는 배열과 매우 밀접한 관계를 가지고 있다.

p1은 int형의 크기 만큼 변수 a개를 가지고 있으므로 

for문으로 배열 p1에 인덱스 값을 넣어준다.

 

free(p1);

 

동적 메모리 할당을 했다면 필수적으로 써서 동적 메모리 할당을 해제하는 함수이다.

만약  해제를 하지 않는다면 지금은 간단한 예제를 하는 것이기 때문에 상관이 없을 수도 있지만

나중 개발을 할 때에는 메모리 누수가 일어날 수도 있으니

선택이 아닌 필수적으로 하는 습관을 들이자.

 

정상적으로 코드를 작성했다면 

이러한 결과가 나옵니다.

 

이렇게 c언어 기초적인 문법은 대충 끝난것 같네요.

추후 혼자서 여러가지 알고리즘 문제 풀면서 스스로 정리해 나가야겠습니다.

 

앞으로는 Python을 공부해볼 계획입니다.

 

더 열심히 하겠습니다.

'C언어' 카테고리의 다른 글

C언어 공룡게임 만들기 2  (0) 2020.05.20
C언어 공룡게임 만들기  (0) 2020.05.18
C언어 파일 입출력  (0) 2020.05.10
코드업 기초 100제 완성!  (0) 2020.05.09