• 검색 결과가 없습니다.

동적 메모리 할당

N/A
N/A
Protected

Academic year: 2022

Share "동적 메모리 할당"

Copied!
20
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

동적 메모리 할당

동적 메모리 할당 개념

동적 메모리 할당

(2)

동적 메모리 할당 개념

메모리 공간이 필요할 때마다 그 크기를 유동적으로 조절하기 위해 필요

프로그램이 커지고 메모리 사용 폭이 커질 경우에 효과적으로 사용

반대되는 개념이 정적메모리

프로그램 실행 이전에 정하느냐 실행 중간

에 정하느냐에 따라서 구별

(3)

동적 메모리 할당 방법

할당 예약어 new

int *p = new int;

int *p = new int(10);

해제

delete p;

(4)

20개 크기의 정수형 배열 선언

#include <iostream.h>

#define 20 void main() {

int Array[MAX]; // 100개의 메모리 공간 차지 Array[0] = 10;

cout << Array[0] << endl;

}

(5)

변수 사용 크기 정하면 에러

#include <iostream.h>

void main() {

int MAX = 40;

int Array[MAX]; // Error 발생 Array[0] = 10;

cout << Array[0] << endl;

}

(6)

입력 받아 크기 정하면 에러

#include <iostream.h>

void main() {

int MAX;

cin >> MAX;

int Array[MAX]; // Error 발생 Array[0] = 10;

cout << Array[0] << endl;

}

(7)

동적메모리 이용 크기 정하면 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;

}

(8)

int *Array 의미

Array 주소값

미지주소 정수형 값

(9)

int *Array;

Array = new int; 의미

Array 0X0000000A

0X0000000A 정수형 값

(10)

int *Array;

Array = new int(100); 의미

Array 0X0000000A

0X0000000A 100

(11)

int *Array;

Array = new int[5]; 의미

Array 0X0000000A

0X0000000A 0 정수형 값 1 정수형 값 2 정수형 값 3 정수형 값 4 정수형 값 5 정수형 값

(12)

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;

할당된 메모리에 좌측 데이터 대입

(13)

Delete []Array;

Array 0X0000000A

0X0000000A ?

?

?

?

?

(14)

프로그램 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

(15)

프로그램 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

(16)

동적메모리 활용

동적메모리의 사용이 변수나 배열을 사용 하는 경우를 살펴보았는데 클래스에서 사 용하는 경우를 알아본다.

new 클래스 명을 사용하여 메모리를 할당 하고 delete 객체명을 사용하여 해제시키 게 된다.

다음은 객체를 생성하고 동적메모리를 객

체에 할당하며 할당된 메모리를 지우는 프

로그램 예를 보인다.

(17)

프로그램 6-3 new 객체 예 #include <iostream.h>

class NewObj {

public:

NewObj();

~NewObj(){

cout << "Destructor "<< endl;

}

void Display();

private:

int count;

};

(18)

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

(19)

프로그램 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;

};

(20)

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

참조

관련 문서

이러한 역할을 하는 compute( ) 함수를 완 성하여 이

– N번째 데이터에 도달하려면 앞에서부터 찾아야 한다. – 링크가

 CPU 내에 데이터가 담겨 있는 메모리 주소를 임시 저장하는 장소.  CPU 내에 데이터가 담겨 있는 메모리 주소를

mark 동일한 메모리 참조,

링크드리스트( Linked List ) 라고 한다. 매우 중요하지만,

- 함수의 인자로 배열이 전달되면 배열의 기본 주소가 (배열의 내용이 아님) call-by-value로 전달됨...

– Woking set 크기 만큼의 프레임 할당. ●

대상은 청주중학교 2학년 학생 중 일부를 선정하여 주로 방과 후 시간 및 여름방학 기간을 이용하여 적용했으며, 학생들이 프 로그램 수업을 통해 실제 제품을 설계하고