[ C++ ] C++ 동적 메모리 할당 및 반환

2021. 4. 6. 10:24·Archive/Develop
728x90
반응형

 

동적 메모리 할당

 

정적 할당

 

변수 선언을 통해 필요한 메모리 할당

 

동적 할당

 

필요한 양이 예측되지 않는 경우. 프로그램 작성시 할당 받을 수 없음

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

-> 힙으로부터 할당 받는다.

 

 

 

C 언어의 동적 메모리 할당

 

 

할당 : malloc

 

해제 : free

 

위 두개 라이브러리 함수를 사용한다.

 

 

C++의 동적 메모리 할당/ 반환

 

new 연산자

 

기본타입 메모리 할당, 배열 할당, 객체 할당, 객체배열 할당

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

객체할당시 생성자 호출

 

delete 연산자

 

new로 할당받은 메모리 반환

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

 

 

 

 

 

+ 메모리

 

1. 코드영역 : 코드

2. 데이터 영역: 전역변수, static 변수( 프로그램 시작시 할당, 프로그램 종료시 소멸)

3. 힙(heap)영역 : 동적할당영역(new로 할당, delete 로 해제)

4. 스택(stack) 영역 : 매개변수, 지역변수(해당 함수 실행 시 할당, 함수 종료 시 해제)

 

 

 

 

변수와 클래스 배열 등은 stack 영역(정적할당, 컴파일시에 할당)

동적할당은 런(실행)시에 할당하고 직접 접근 불가.

 

그러므로 스택영역에 포인터 변수를 만들어 놓고 접근한다.

 

 

 

 

new 와 delete 연산자

 

C++ 의 기본 연산자이다.

 

new/delete 연산자 사용형식

 

 

new

데이터타입 *포인터변수 = new 데이터 타입;

 

delete

delete 포인터변수

 

 

new/delete의 사용

 

int *plnt = new int;

 

delete pInt;

 

 

 

 

 

C++ 메모리 할당 예제

 

#include <iostream>
#include <string>
using namespace std;



int main() {
	int* p;

	p = new int[5];
	int n;
	if (!p) {
		cout << "메모리 할당 불가";
		return 0;
	}

	for (int i = 0; i < 5; i++) {
		p[i] = i+1;
		n = p[i];
		cout << "*p = " << p[i] << '\n';
		cout << "n = " << n << '\n';
	}
	

	delete []p;
}

 

 

 

 

 

 

 

 

아래와 같이 활용할 수 있다.

 

 

 

int main() {
	cout << "입력할 정수 개수? : ";
	int n;
	cin >> n; // 정수 개수 입력
	if (n <= 0) return 0;
	int* p = new int[n];
	if (!p) {
		cout << "메모리 할당 불가";
		return 0;
	}

	for (int i = 0; i < n; i++) {
		cout << i + 1 << "번째 정수 : " ;
		cin >> p[i];
	}

	int sum = 0;
	for (int i = 0; i < n; i++) {
		sum += p[i];
	}
	cout << "평균 : " << sum / n << endl;
	delete []p;
		
	
}

 

 

 

 

 

 

728x90
반응형

'Archive > Develop' 카테고리의 다른 글

[ Docker ] Docker hub 를 이용해 Portainer 이미지 다운받기  (0) 2021.04.08
[ C++ ] 객체의 동적 생성 및 반환  (0) 2021.04.06
[ Django ] Django Mobile Debugging | 장고 서버 모바일 | Django IP 지정  (0) 2021.04.05
[ Oracle ] 서브쿼리(SubQuery) | 서브쿼리 예제  (0) 2021.04.05
[ Django ] Django Tutorial 001 | DjangoProject 환경 구축  (0) 2021.03.31
'Archive/Develop' 카테고리의 다른 글
  • [ Docker ] Docker hub 를 이용해 Portainer 이미지 다운받기
  • [ C++ ] 객체의 동적 생성 및 반환
  • [ Django ] Django Mobile Debugging | 장고 서버 모바일 | Django IP 지정
  • [ Oracle ] 서브쿼리(SubQuery) | 서브쿼리 예제
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    docker
    파이썬
    백준 풀이
    오라클
    Git
    Oracle
    자바스크립트
    자바스크립트 객체
    oracle db
    Python
    파이썬 문제
    코드업
    카카오 100일 프로젝트
    자바스크립트 API
    비박스
    javascript
    Django
    코드업 기초
    파이썬 기초
    백준 파이썬
    백준 문제풀이
    백준
    보안뉴스
    파이썬 백준
    C++
    파이썬 기초 문제
    Codeup
    코드업 파이썬 기초 100제
    파이썬 알고리즘
    장고
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ C++ ] C++ 동적 메모리 할당 및 반환
상단으로

티스토리툴바