정적 메모리 할당
int arr[100];
위와 같이 메모리를 정적으로 할당할 수 있습니다.
처음 프로그램을 만들었을 때 100칸의 배열로 유저들을 수용하려고 했습니다.
근데 100명이상의 유저들이 들어온다면 프로그램을 수정해서 200으로 변경해서 해결할 수도 있습니다.
하지만 또 300명 400명으로 된다면 매번 변경해야하며,
변경하는것이 번거로워서 1000, 10000으로 공간을 많이 만들어 놓을 수도 있습니다.
이때 200명의 사람들만 이용중이라면 공간(메모리)가 낭비될 수 있습니다.
이럴 때 동적으로 메모리를 할당할 수 있습니다.
#include <stdio.h>
#include <stdlib.h>
int main() {
int size;
scanf("%d", &size);
int *arr=malloc(sizeof(int)*size);
for (int i = 0; i < size; ++i){
scanf("%d", &arr[i]);
}
for (int i = 0; i < size; ++i){
printf("arr[%d]=%d\n", i, arr[i]);
}
free(arr);
}
malloc 함수를 사용해서 포인터 arr에 size만큼의 크기를 동적으로 할당해주었습니다.
void *malloc(size_t size)
메모리를 할당한 후에 해제하지 않으면 메모리가 누출됩니다.
메모리를 쓰지 않게 된 경우 free 함수를 사용해서 메모리를 해제해줍니다.
void free(void *ptr)
malloc외에도 calloc, realloc 함수가 존재합니다.
calloc은 malloc과 동일한데 해당 메모리를 0으로 초기화 합니다.
void *calloc(size_t n, size_t size)
realloc 함수는 이미 할당되어 있는 메모리를 다시 할당할 때 사용합니다.
void *realloc(void *memblock, size_t size)
arr = realloc(arr, sizeof(int)*newSize);
'자료구조' 카테고리의 다른 글
단순 연결 리스트, 이중 연결 리스트, 환형 연결 리스트 (0) | 2021.05.03 |
---|---|
배열(Array), 리스트(List) (0) | 2021.05.03 |
구조체, typedef (0) | 2021.05.03 |
포인터, 이중 포인터, Call by value, Call by reference (0) | 2021.05.03 |
시간 복잡도, 공간 복잡도 (0) | 2021.05.03 |