c23 [C++] 동적 메모리 할당
본문 바로가기
[C++]

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

by Jarvis2304 2022. 10. 8.

▶ 동적 메모리 할당

▷ 정적 할당 :변수 선언을 통해 메모리 할당

- 많은 양의 메모리는 배열 선언을 통해 할당

 

▷ 동적 할당 :컴퓨터 프로그래밍에서 실행시간 동안 사용할 메모리 공간을 할당하는 것

- 필요한 양이 예측되지 않은 경우, 필요한 메모리를 프로그램을 작성하는 단계에서 모두 선언하는 것은 불가능

- 메모리 공간을 사용자가 필요한 만큼 사용하기 위해 사용

- 실행 중에 힙 메모리에서 할당

- 힙(heap)으로부터 할당 (heap :운영체제가 프로세스(프로그램)의 실행을 시작 시킬 때 동적 할당 공간으로 준 메모리 공간)

 

▷ C 언어의 메모리 할당 : malloc() / free() 라이브러리 함수 사용

▷ C++언어의 메모리 할당/반환

● new 연산자 :기본 타입 메모리 할당, 배열 할당, 객체 할당, 객체 배열 할당

- 객체의 동적 생성 :힙 메모리로부터 객체를 위한 메모리 할당 요청

- 객체 할당 시 생성자 호출

 

● delete 연산자 : new로 할당 받은 메모리를 반환

- 객체의 동적 소멸 :소멸자 호출 뒤 객체를 힙에 반환

 

 

 

 

 

▶ new와 delete 연산자  

 

 

 

기본타입의 메모리 동적 할당 및 반환

예제) 정수형 공간의 동적 활당 및 봔환 

 

※ 기본타입의 delete 사용 시 주의 사항 ※

- 적절치 못한 포인터로 delete하면 실행 시간 오류 발생

 

(1) 동적으로 할당 받지 않은 메모리 반환 - 오류발생

 

(2) 동일한 메모리 두 번 반환 - 오류발생

 

 

 

 

 

▶ 배열의 동적 생성 및 반환

▷ new / delete 연산자의 사용 형식

 

예제) 정수형 배열의 동적 할당 및 반환

 

※ 배열의 동적 할당 메모리 초기화 및 delete시 유의사항 ※

(1) 동적 할당 메모리 초기화

 

● 동적 할당 시 초기화

 

● 배열은 동적 할당시 초기화 불가능

 

 

(2) delete [] 생략

- 컴파일 오류는 아니지만 비정상적인 반환

 

 

 

 

 

 

 

▶ 객체의 동적 생성 및 반환

예제) Circle 객체의 동적 생성 및 반환

 

예제) Circle 객체의 동적 생성 및 반환 응용

 

 

 

 

▶ 객체 배열의 동적 생성 및 반환

 

 

 

▷ 동적으로 생성된 배열도 보통 배열처럼 사용

 

▷ 포인터로 배열 접근

 

▷ 배열 소멸

 

 

예제)Circle 배열의 동적 생성 및 반환 

 

 

예제) 객체 배열의 동적 생성과 반환 응용

 

 

 

 

▶ 동적 메모리 할당과 메모리 누수

 

 

 

 

 

 

참고문헌: 황기태,[명품 C++ Programming] 생능출판(2017), 671P

'[C++]' 카테고리의 다른 글

[C++] 문자열  (1) 2022.10.15
[C++] this 포인터  (0) 2022.10.14
[C++] 객체 배열  (0) 2022.10.08
[C++] 객체 포인터  (0) 2022.10.05
[C++] C++ 프로그램 작성법  (0) 2022.10.05

댓글