본문 바로가기
C++ Toast

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

by 하루한번토스트 2024. 8. 8.

C 에서는 동적 메모리 할당 및 반환을 위해 malloc()와 free()를 사용하지만 

C++에서는 new와 delete 연산자를 이용한다

* 자바에서는 new연산자로 객체를 생성할때 사용한다.

* malloc 은 할당받는 크기를 지정해야한다.또한 리턴되는 포인터를 형변환 해야하는 불편함이 있다

 

동적 메모리를 사용하는 이유는?

사용할 자료의 크기를 미리 알 수 있다면 정적 할당이 편하다.

하지만 얼마나 필요한지 모를 때가 더 많다. 이러한 문제를 해결하기 위해 동적 메모리 할당을 한다.

 

delete p;로 메모리를 반납하면 연결이 끊어진다.

 

 

배열의 동적 할당 및 반환

[사용형식]

데이터 타입 *포인터변수=new 데이터타입[배열의 크기]

delete []  포인터변수;

 

#include <iostream>
using namespace std;

int main(){
	int *p=new int[5];
	
	//힙에서 메모리를 받지 못한 경우
    if(!p){
        cout<<"메모리 할당 실패";
        return 0;
    }
    
    for(int i=0;i<5;i++){
        p[i]=i;
    }

    for(int i=0;i<5;i++){
        cout<<p[i]<<'\t';
    }

    delete []p;
    return 0;
}

 

p가 배열에 대한 포인터이므로

 

for(int i=0;i<5;i++){
        *(p+i)=i;
  } 도 사용 가능하다.

 

 

초기값 지정 // delete

int *pArray=new int[]{1,2,3,4} //1,2,3,4로 초기화된 정수 배열 생성

delete []pArray;