본문 바로가기
Computer Languages/C | C++

[펌] new와 delete

by blackcon 2010. 10. 11.
메모리를 동적으로 할당하고 해제하기 위해 C에서 malloc과 free가 있었다. C++에서는 new와 delete를 사용한다.

 

< new와 delete >

- new 연산자를 사용할 경우 명시적 형변환을 할 필요가 없다.

 int *p=(int *) malloc(sizeof(int));       // 4바이트 할당

 int *p=(int *) malloc(sizeof(int)*3);   // 12바이트(int형 3개를 갖는 배열) 할당

 int *p=new int;        // 4바이트 할당

 int *p=new int[3];   // 12바이트(int형 3개를 갖는 배열) 할당

- 메모리 할당과 동시에 초기화가 가능하다(단, 배열 형태로 할당받을 경우에는 초기화가 여전히 불가능).

 int *p=new int(100);     // int형 변수 하나를 할당받으면서 값을 '100'으로 초기화.

- new를 사용하여 메모리를 할당한 경우에는 delete 연산자를 사용해서 메모리 해제를 해야한다.

 delete p;

 delete [] p;

 

 

--------------------------------------------------------------------------------------------------------------------------

ex 10. (int형 변수 하나의 동적 할당 및 초기화)

#include <iostream>
using namespace std;

 

int main(void){
   int *p=new int(100);      
// int형 변수 동적 할당 및 100으로 초기화

 

   cout<<"포인터 변수의 주소 : "<<&p<<endl;
   cout<<"포인터 변수의 값 : "<<p<<endl;
   cout<<"동적 변수의 값 : "<<*p<<endl;

 

   delete p;

 

   return 0;
}

   

 

 ex 11.  int형 변수 5개를 동적으로 할당받고 각각 해당 원소의 인덱스로 값 채우기. (배열의 동적 할당)

#include <iostream>
using namespace std;

 

int main(void){
   int *p=new int[5];   
// int형 변수 5개 동적 할당

 

   for(int i=0; i<5; i++)
      p[i]=i;

 

   for(int i=0; i<5; i++)
      cout<<p[i]<<" ";
   cout<<endl;

 

   delete [] p;

 

   return 0;
}

 

ex 12. (2차원 배열의 동적 할당)

#include <iostream>
using namespace std;

 

int main(void){
   int **p;                  // int형 포인터에 대한 포인터
   p=new int *[4];    // p[0], ..., p[3]이 int형 포인터
 
   int i, j;

 

   for(i=0; i<4; i++)
      p[i]=new int[5];
 
// 각 포인터를 통해 int형 변수 5개 생성(4행 5열)

 

   for(i=0; i<4; i++){
      for(j=0; j<5; j++)
         p[i][j]=i+j;
   }

 

   for(i=0; i<4; i++){
      for(j=0; j<5; j++)
         cout<<p[i][j]<<"\t";
      cout<<endl;
   }

 

   for(i=0; i<4; i++)
     
delete [] p[i];
   delete [] p;

 

   return 0;
}

   

  

ex 12_1. (2차원 배열의 동적 할당) - delete 한 번만 해주도록.

#include <iostream>
using namespace std;

 

int main(void){
   int (*p)[5]=new int[4][5];     
// 4행 5열의 2차원 배열 할당

 

   for(int i=0; i<4; i++){
      for(int j=0; j<5; j++)
         p[i][j]=i+j;
   }

 

   for(int i=0; i<4; i++){
      for(int j=0; j<5; j++)
         cout<<p[i][j]<<"\t";
      cout<<endl;
   }

 

   delete [] p;      // 한 번만 delete(해제)해주면 됨.

 

   return 0;
}

 

 

 

 

 


'Computer Languages > C | C++' 카테고리의 다른 글

string을 char로 취급하기  (0) 2010.10.21
[펌]private, proteted, public 의 차이  (3) 2010.10.12
포인터 개념  (0) 2010.10.11
3x3 행렬의 곱  (0) 2010.10.08
링크드리스트(노드추가/삭제)  (0) 2010.10.08