[5주차] 동적 할당
반응형
동적 할당Dynamic Memory Allocation
동적 할당이란?
이름 그대로 프로그램이 실행되는 중간에 동적으로 메모리 공간을 할당해 주는 것.
할당 - 사용 - 해제의 3단계로 구성되며, 이 모든 과정을 프로그래머가 명시해줘야 한다.
기본 예제
동적할당을 위한 기본 함수들은 <stdlib.h>
헤더에 구현되어 있다.
malloc
함수를 활용하면 원하는 만큼의 메모리를 할당받고, 그 시작 주소를 얻을 수 있다. (리턴타입은 void *
이다.) 할당에 실패하면 NULL이 반환된다.
#include <stdlib.h>
int main() {
int *p = NULL; //동적으로 할당된 메모리에 접근하기위한 포인터
p = (int *) malloc(5*sizeof(int)); //int 변수 5개의 크기만큼 메모리 할당
p[0] = 1;
*(p+2) = 2;
free(p);//메모리 해제
return 0;
}
동적 메모리 연결
동적으로 할당된 메모리 공간에는 변수명을 붙일 수 없기 때문에 포인터로 사용한다.
(자료형 *)
을 malloc
앞에 붙여서 원하는 자료형의 포인터로 형변환을 해준 다음 사용하면 된다.
동적으로 고차원 배열 할당
pch = (char **) malloc(3*sizeof(char *));
pch[i] = (char *) malloc(4*sizeof(char));
위 코드를 통해 3x4 이차원 배열을 만들 수 있다.
해제할 때도 두번에 걸쳐 각각 차원마다 따로 해제해줘야 한다.
기타 동적 메모리 할당 함수
calloc(unsigned int num, unsigned int size)
size 크기의 공간을 num 갯수만큼 할당하고 0으로 초기화한다.
realloc(void * ptr, unsigned int size)
동적으로 이미 할당된 ptr의 공간을 size(byte) 크기 만큼 재조정한다. 현위치에서 불가능하면 자동으로 해제하고 새로운 공간에 재할당한다.
반응형
'학부 수업 > C프로그래밍' 카테고리의 다른 글
[7주차] 파일 입출력 (0) | 2020.04.10 |
---|---|
[6주차] 연산자 함수, 자료형 심화 (0) | 2020.04.10 |
[4주차] 구조체 (0) | 2020.04.10 |
[3주차] 문자열 (0) | 2020.04.10 |
[2주차] 포인터 개요 및 복습 (0) | 2020.04.10 |
댓글
이 글 공유하기
다른 글
-
[7주차] 파일 입출력
[7주차] 파일 입출력
2020.04.10 -
[6주차] 연산자 함수, 자료형 심화
[6주차] 연산자 함수, 자료형 심화
2020.04.10 -
[4주차] 구조체
[4주차] 구조체
2020.04.10 -
[3주차] 문자열
[3주차] 문자열
2020.04.10