동적 메모리 할당
• 동적 메모리 할당 개념
• 동적 메모리 할당
동적 메모리 할당 개념
메모리 공간이 필요할 때마다 그 크기를 유동적으로 조절하기 위해 필요
프로그램이 커지고 메모리 사용 폭이 커질 경우에 효과적으로 사용
반대되는 개념이 정적메모리
프로그램 실행 이전에 정하느냐 실행 중간
에 정하느냐에 따라서 구별
동적 메모리 할당 방법
할당 예약어 new
int *p = new int;
int *p = new int(10);
해제
delete p;
20개 크기의 정수형 배열 선언
#include <iostream.h>
#define 20 void main() {
int Array[MAX]; // 100개의 메모리 공간 차지 Array[0] = 10;
cout << Array[0] << endl;
}
변수 사용 크기 정하면 에러
#include <iostream.h>
void main() {
int MAX = 40;
int Array[MAX]; // Error 발생 Array[0] = 10;
cout << Array[0] << endl;
}
입력 받아 크기 정하면 에러
#include <iostream.h>
void main() {
int MAX;
cin >> MAX;
int Array[MAX]; // Error 발생 Array[0] = 10;
cout << Array[0] << endl;
}
동적메모리 이용 크기 정하면 OK
#include <iostream.h>
void main() {
int MAX;
int * Array;
cin >> MAX; // 입력 받음 Array = new int[MAX]; // O.K
Array[0] = 10;
cout << Array[0] << endl;
}
int *Array 의미
Array 주소값
미지주소 정수형 값
int *Array;
Array = new int; 의미
Array 0X0000000A
0X0000000A 정수형 값
int *Array;
Array = new int(100); 의미
Array 0X0000000A
0X0000000A 100
int *Array;
Array = new int[5]; 의미
Array 0X0000000A
0X0000000A 0 정수형 값 1 정수형 값 2 정수형 값 3 정수형 값 4 정수형 값 5 정수형 값
Array 0X0000000A
0X0000000A 100 200 300 400 500
int * Array;
Array = new int[5];
Array[0]=100;
Array[1]=200;
Array[2]=300;
Array[3]=400;
Array[4]=500;
할당된 메모리에 좌측 데이터 대입
Delete []Array;
Array 0X0000000A
0X0000000A ?
?
?
?
?
프로그램 6-1 new 자료형 예 #include <iostream.h>
void main() {
int *pt;
pt = new int; // ① *pt=10;
cout << "&pt="<<&pt<< endl;
cout <<"pt="<<pt<<endl;
cout <<"*pt="<<*pt<<endl; // ② delete pt;
cout <<"del *pt="<<*pt<<endl; // ③ }
pt=0x0012ff7c
&pt=0x00431c20
*pt=10
del *pt=-572662307
프로그램 6-2 new 자료형 예 #include <iostream.h>
void main() {
int *aa, sum=0;
aa = new int[3]; // ① aa[0]=10;
aa[1]=20;
aa[2]=30;
for(int i=0; i<3; i++) sum += aa[i];
cout << "sum=" << sum <<endl;
delete [ ]aa; // ② }
sum=60
동적메모리 활용
동적메모리의 사용이 변수나 배열을 사용 하는 경우를 살펴보았는데 클래스에서 사 용하는 경우를 알아본다.
new 클래스 명을 사용하여 메모리를 할당 하고 delete 객체명을 사용하여 해제시키 게 된다.
다음은 객체를 생성하고 동적메모리를 객
체에 할당하며 할당된 메모리를 지우는 프
로그램 예를 보인다.
프로그램 6-3 new 객체 예 #include <iostream.h>
class NewObj {
public:
NewObj();
~NewObj(){
cout << "Destructor "<< endl;
}
void Display();
private:
int count;
};
NewObj::NewObj() {
count = 10;
cout << "Call the Class " << endl;
}
void NewObj::Display() {
cout << "count: " << count << endl;
}
void main() {
NewObj Mouse; // ① Mouse.Display();
NewObj * pMos = new NewObj; // ②
cout << " Constructor is called by new : \n" ; delete pMos ; // ③
}
Call the Class count: 10
Call the Class
Constructor is called by new :
Destructor Destructor
프로그램 6-4 new 멤버자료 예 #include <iostream.h>
class NewHouse {
public:
NewHouse();
~NewHouse();
int GetValue() const{ return *itsValue;}
void SetValue(int value){ *itsValue = value;}
private:
int *itsValue;
};
NewHouse::NewHouse() {
cout << "Constructor" <<endl;
itsValue = new int(100); //① }
NewHouse::~NewHouse(){
cout << "Destructor "<< endl;
delete itsValue; //② }
void main() {
NewHouse *Room = new NewHouse;
cout << "Room Number is " << Room->GetValue();
cout << endl;
Room->SetValue(101);
cout << "Room Number is " << Room->GetValue();
cout << endl;
delete Room;
}
Constructor
Room Number is 100 Room Number is 101 Destructor