728x90
동적 메모리 할당 (Dynamic Memory Allocation)
: 프로그램 실행 도중 동적으로 메모리를 할당하는 것
동적 : 할당될 메모리의 크기가 컴파일할 때 미리 정해져 있지 않았다는 의미
- 정적메모리 할당(Static Memory Allocaion)
: 프로그램이 실행되기 전에 할당해야 할 메모리의 크기가 미리 정해진 경우
//정적 메모리 할당의 잘못된 예
int size= 100;
int int_array[size] = {0,}; //오류발생
동적메모리 할당을 위의 소스 처럼 실행하면 오류가 발생한다.
방법 1) 정적메모리 할당 | 방법 2) 동적 메모리 할당 |
int int_array[100] = {0, }; | int *ptr_int = NULL; int size = 100; .... size = 200; ptr_int = (int*) malloc(sizeof(int)*size); |
malloc을 이용하여 동적 메모리 할당을 해야한다!
동적 메모리 할당의 단점
- 소스코드가 복잡하다
- 사용방법이 정적 메모리 할당에 비해 다소 어렵다
- 메모리를 다 사용한 다음 반드시 메모리를 해제 시켜주어야한다.
- 메모리 누수(memory leak)
동적 메모리 할당 관련 함수 3가지
- malloc() : 메모리 할당
- free() : 메모리 해제 **
- memset() : 메모리 초기화 **
함수 malloc()을 이용한 메모리 할당
#include <stdlib.h>
void *malloc(int size);
동적 메모리 할당 방법
ptr_int = (int*)malloc(sizeof(int)*size);
(int*) : 형변환
malloc ( sizeof(int) [ -> int의 사이즈 , 4 ] * size[원소의 개수] );
ptr_int = (int*)malloc(sizeof(int)*size);
if(ptr_int != NULL){
//명령문 실행
}
else{
//에러
}
NULL인경우 오류가 발생하기 때문에 NULL 체크를 반드시 해주어야한다.
함수 free() 를 이용한 메모리 해제
#include <stdlib.h>
void free(vode *ptr);
if(ptr_int != NULL){
//포인트 변수에 값이 있는 경우 메모리 해제
free(ptr_int);
}
포인트 변수가 널인경우 free() 할 경우 프로그램이 종료된다
함수 memset()을 이용한 메모리 초기화
#include <stdlib.h>
void *memset(vode *ptr_start,int value, size_t count);
*memset(시작주소, 값, byte);
동적 메모리 할당 예제
int *ptr_int = NULL;
int size = 100;
ptr_int = (int*)malloc(sizeof(int)*size); //400
if(ptr_int != NULL){
memset(ptr_int,0,sizeof(int)*size); // 초기화
//로직처리
free(ptr_int); // 사용된 동적할당 포인터변수 초기화
}
반응형
'Study Log > 자료구조' 카테고리의 다른 글
[자료구조] 리스트의 개념, 리스트 사용을 위한 추상자료형 (0) | 2021.04.27 |
---|---|
[자료구조] 포인터의 포인터의 의미와 사용방법 (0) | 2021.04.25 |
[자료구조] 포인터의 의미와 사용법(참조연산자 *, 주소연산자 &) (0) | 2021.04.25 |
[자료구조] 구조체의 정의와 선언 및 초기화 (0) | 2021.04.25 |
[자료구조] C프로그래밍 기법(2) - 배열 (0) | 2021.04.23 |