[C] 동적 할당 (malloc, calloc, realloc, free)

PersesTitan·2023년 6월 18일
0

C

목록 보기
9/9

티스토리 버전 링크


동적 할당이란 말그대로 프로그램이 돌아가는 동안 메모리를 할당 시켜주는 작업인데 c에서는 기본적으로 배열크기라던가 변수를 미리 생성해두지 않으면 해당 변수를 생성할 수 없으므로 동적 할당을 사용하여 프로그램이 실행하고 있는 도중에 변수를 사용할 수 있도록 하는 것이 동적할당입니다.
동적 할당을 하기 위해서는 stdlib.h를 가져와주어야합니다.

#include <stdlib.h>

malloc

기본적으로 동적할당을 할때 사용하는 함수 입니다. 기본값은 쓰레기 값이 들어가기 때문에 값을 변경해주어야합니다.

파라미터 : (할당할 크기)

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

int main() {
    int *array = malloc(sizeof(int) * 5);
    for (int i = 0; i < 5; ++i) {
        array[i] = i;
    }

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

    free(array);
    return 0;
}

calloc

malloc과 비슷하지만 타입크기와 갯수를 지정해주고, 쓰레기 값이 아닌 초기값이 0으로 설정된 값이 설정된 값을 반환해줍니다.

파라미터 : (생성할 갯수, 타입 크기)

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

int main() {
    int *array = calloc(5, sizeof(int));
    for (int i = 0; i < 5; ++i) {
        array[i] = i;
    }

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

    free(array);
    return 0;
}

realloc

이미 할당된 메모리의 크기를 변경하는 함수 입니다.

파라미터 : (할당한 포인터 값, 변경할 크기)

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

int main() {
    int *array = calloc(3, sizeof(int));
    array = realloc(array, 5 * sizeof(int));
    for (int i = 0; i < 5; ++i) {
        array[i] = i;
    }

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

    free(array);
    return 0;
}

free

메모리 해제를 시켜주는 함수 입니다.

보통 동적할당을 시킨 주소를 해제할때 사용하기 때문에 동적할당 함수와 세트로 사용합니다.

아무리 할당시켜도 램이 남아돌아서 램좀 가득 채우고 싶다거나 프로그램 시킨 사람의 컴퓨터의 램을 채워서 컴퓨터를 느리게 만들거나 다운 시키고 싶지 않은 이상 해당함수를 이용하여 실행하는 동안 할당된 메모리를 해제 시켜주는게 좋습니다.

이 무료(?)함수는 해제해주지 않으면 메모리 릭의 원인이 될 수 있기 때문에 사용이 끝나면 free함수를 사용하여 해제 시켜주는 것이 좋습니다.


?.. 무료 함수 맞아요 ㅇㅇ

profile
안녕하세요 페르세스 티탄입니다! 부족한 부분이 많이 있겠지만 잘부탁드립니다.

0개의 댓글