C++
[C++] 메모리 동적 할당 new와 delete 연산자
SWBlossom
2019. 12. 17. 09:45
C언어에서 malloc()과 free()가 있다면 C++문법에는 new와 delete 연사자가 있다.
new와 delete는 C++에서 객체를 동적 할당하고 해제하는 연산자이다. 예는 다음과 같다.
int *x = new int;
delete x;
배열의 경우 다음과 같이 사용할 수 있다.
int *y = new int[10];
delete[] y;
new 연산자는 malloc() 함수와 달리 메모리 크기를 정하지 않아도 된다.
#include <iostream>
using namespace std;
int main()
{
//메모리 동적 할당과 초기화
int* pNew = new int(10);
cout << *pNew << endl;
*pNew = 100;
cout << *pNew << endl;
delete pNew; //해제
return 0;
}
결과값:
10
100
한편, 메모리 동적 할당 사용 시 주의해야 할 점이 있다.
#include <iostream>
using namespace std;
int main()
{
int* ptr1, * ptr2;
ptr1 = new int;
*ptr1 = 10;
ptr2 = new int;
ptr2 = ptr1; //ptr1과 ptr2는 같은 주소
delete ptr1;
delete ptr2; //에러
return 0;
}
결과값:
에러, 프로그램종료
예제 실행 시 에러가 발생하면서 프로그램이 종료된다. ptr1과 ptr2는 주소가 같은데 ptr1 주소를 이미 delete 했지만 다시 delete 했기 때문이다.