동적 할당(dynamic allocation)
동적 할당은 힙 영역에 동적으로 메모리를 할당하는 것을 말합니다.
힙 영역은 메모리 할당과 해제가 자유롭습니다. 하지만 메모리 해제( free() )는 제대로 해줘야 합니다.
메모리 해제를 하지 않을 경우 메모리 낭비가 일어나게 됩니다.
malloc() 이외에도 calloc(), realloc() 등이 있습니다.
<mallod 사용법>
자료형* 포인터명 = (자료형*)malloc(sizeof(자료형)*크기); //사용법1
자료형* 포인터명 = (자료형*)malloc(크기); //사용법2
동적 할당 초기화(clear allocation) -> calloc()
자료형* 포인터명 = (자료형*)calloc(크기, sizeof(자료형));
동적 할당 크기 변경(resize allocation) -> realloc()
자료형* 포인터명1 = (자료형*)malloc(sizeof(자료형)*크기); //이미 할당된 메모리
자료형* 포인터명2 = (자료형*)realloc(포인터명1, sizeof(자료형)*변경할 크기); //포인터명1 메모리 크기 변경하기
** 동적 할당 메모리 해제 -> free()
free(포인터명);
* 메모리를 해제하지 않으면 메모리 낭비가 일어나기에 꼭 free함수로 메모리를 해제해야 함.
* 명시적 형변환
malloc 함수는 리턴 타입이 void입니다. 그럼에도 malloc함수에는 명시적 형변환을 해줘야 합니다.
동적 할당을 할 때 (자료형*)으로 형변환을 해주지 않으면 Segmentation fault라는 오류를 접할 수 있습니다.
calloc함수와 realloc함수도 마찬가지로 명시적 형변환을 해줘야 합니다.
동적 할당 사용 예제
메모리를 할당(malloc)하고, 메모리 초기화(calloc), 크기 변경(realloc) 함수를 사용하여, 1 ~ 10까지 출력하기
#include <stdio.h>
#include <stdlib.h>
void main() {
int* mArr = 0;
int size = 0;
mArr = (int*)malloc(sizeof(int) * 5);
mArr = (int*)calloc(size, sizeof(int));
mArr = (int*)realloc(mArr, sizeof(int) *10);
for (int i = 0; i < 10; i++) {
mArr[i] = i + 1;
}
for (int i = 0; i < 10; i++) {
printf("%d ", mArr[i]);
}
printf("\n");
free(mArr);
}
마지막에 free함수를 사용하여 꼭 메모리 해제하기!!
<콘솔창>
* 동적 배열 사용법(2가지)
- *(mArr + i)
- mArr [i]
다음 글에서 메모리를 할당받아 동적 배열을 만드록 정렬까지 하는 코드를 설명하겠습니다.
감사합니다!
2021.09.06
'C언어' 카테고리의 다른 글
[C언어] 막대그래프 출력하기 (0) | 2021.09.13 |
---|---|
[C언어] 동적할당 사용 예제 (0) | 2021.09.07 |
[자료구조 - C언어] 정렬(Sort) - Bubble, Insertion, Selection (0) | 2021.08.30 |
[C언어] 로또 번호 뽑기 (0) | 2021.08.17 |
[C언어] 구조체(2) - 예제 (0) | 2021.08.08 |