포스트

[ C++ ] 동적 메모리 할당

동적 메모리 할당



1. 동적 메모리 할당 함수

  • C언어에서 malloc()함수를 이용해 원하는 크기의 메모리 공간을 확보 가능

  • Malloc() 함수는 메모리 할당에 성공하면 주소를 반환, 그렇지 않으면 NULL 반환

  • Malloc() 함수는 라이브러리에 정의


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <stdlib.h>

int main(void) {

int*a = malloc(sizeof(int));

printf("%d\n",a);

// Malloc(할당할 바이트 크기);
*a = malloc(sizeof(int));

printf("%d\n", a);

system("pause");

return 0;

}

>>
423336
423336



  • 전통적인 C언어에서는 스택에 선언된 변수는 따로 메모리 해제 필요 X

  • 동적으로 할당된 변수는 반드시 free()함수로 메모리 해제

  • 메모리 해제를 하지 않으면 메모리 내의 프로세스 무게가 더해져 차후 오류 발생

  • 메모리 누수(Memory Leak) 방지는 코어 개발자의 핵심 역량


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>

int main(void) {

int*a = malloc(sizeof(int));

printf("%d\n",a);

free(a);

*a = malloc(sizeof(int));

printf("%d\n", a);

free(a);

system("pause");

return 0;
}



2. 동적으로 문자열 처리

  • 일정 범위의 메모리를 모두 특정한 값으로 설정하기 위해서는 memset() 사용

  • 한 글자(바이트)씩 값을 저장하므로 문자열 배열의 처리 방식과 흡사

  • 따라서 memset()함수는 라이브러리에 선언


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(void) {

char *a = malloc(100);

// memset(포인터, 값, 크기);
memset(a, 'A', 100);

for (int i = 0; i < 100; i++) {

printf("%c", a[i]);

}

system("pause");

return 0;

}

>>A 100 출력



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.