C++/summary

동적할당 메모리 && 메모리의 해제

gandus 2010. 5. 4. 15:54

정적할당 메모리에서는

int buffer[80];

이것을 다시 100개로 늘릴때는 불가능하다.

이럴때 동적할당 메모리가 가능하다.


예전 C에서는             // malloc 과 free라는  함수를 사용하였다.

int *p =   (int *) malloc(sizeof(int) *10 )   // 이것은 힙영역에 저장
                                                      // void 주소값이 반환된다.  그래서 타입변환이 필요하다.

p[0] = 10;  // 이렇게 사용이 가능했다. 

하지만 이것은 할당후 사라지지 않는다.

그래서 free(p);   


하지만  C++에서는     // new 와 delete 라는 연산자를 사용하였다.

int *p   = new int[10];

p[0] = 100;              // 이런식으로 사용가능

delete[] p;

이것의 차이는 함수는 선언, 기본적 제공하지 않음
하지만 연산자는 선언필요없이 언어적으로 기본적으로 사용이 가능하다



 

void sub()

{

  int *pi = new int;  //        

  *pi = 67;                   // 메모리 누수

  pi = new int;    //

  *pi = 99;                   // 메모리 누수가 발생한다.

}