동적 메모리 할당 (dynamic memory allocation)
동적 메모리가 할당되는 공간을 히프(heap) 라고 한다. 히프는 운영체제가 사용되지 않는 메모리 공간을 모아 놓은 곳이다. 전형적인 동적 메모리 할당 코드는 아래와 같다.
int *p;
p = (int *)malloc(sizeof(int)); //동적 메모리 할당
*p = 1000; //동적 메모리 사용
free(p); //동적 메모리 반납
1. malloc() 함수는 size 바이트 만큼의 메모리 블록을 할당. malloc() 은 동적 메모리 블럭의 시작 주소를 반환. 반환되는 주소의 타입은 void *이므로 이를 적절한 포인터로 형변환시켜야 함. 메모리 확보가 불가능하면 NULL을 함수의 반환값으로 반환.
2. 동적 메모리는 포인터로만 사용할 수 있다. *p 는 p 가 가리키는 장소이다.*p = 1000; 문장을 실행하면 p 가 가리키는 장소에 1000이 저장.
3. free() 함수는 할당된 메모리 블록을 운영체제에게 반환. 여기서 주의할 점은 malloc() 함수가 반환했던 포인터 값을 잊어버리면 안됨. 포인터값을 잊어버리면 동적 메모리를 반환할 수 없다. 또한 malloc() 의 반환값이 NULL 인지도 항상 확인해야 함.
이제 정수 10개를 저장할 수 있는 메모리를 동적으로 할당해보자.
#include <stdio.h>
#include <stdlib.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
#include <malloc.h>
#define SIZE 10
int main() {
int *p;
p = (int *)malloc(SIZE*sizeof(int));
if (p == NULL) {
fprintf(stderr,"메모리가 부족해서 할당할 수 없음\n");
exit(1);
}
for (int i = 0; i<SIZE; i++)
p[i] = i;
for (int i = 0; i<SIZE; i++)
printf("%d ",p[i]);
free(p);
return 0;
}

| 전역 변수로 스택 구현하는 방법 (0) | 2021.10.17 |
|---|---|
| 구조체와 포인터 (0) | 2021.10.17 |
| 배열을 함수의 매개변수로 사용하는 프로그램 (0) | 2021.10.17 |
| #1 cpp study (0) | 2021.08.11 |
| CPU 가 일하는 방법 (주소, 메모리) (0) | 2021.07.09 |
댓글 영역