[C++] new delete 할당과 해제

Programming/C++_C#|2017. 3. 30. 09:26
반응형

c++에서는 포인터변수라는 것이 있는데

메모리의 주소를 가리키는 변수이다.

이 안에는 빈공간으로 되어있고 주소만 가리키는데 포인터변수에 메모리를 할당하는 것을 new할당이라고 한다.




new와 delete

포인터변수는 선언시 그 변수 자체는 4바이트지만 그 변수 안에 메모리를 잡는 것이 아니다.

아래 그림을 보면 int* p는 메모리를 잡지 않고 다른 int형 변수의 주소값을 가리키기만 한다.





예)

int a = 10;

int* p = NULL;

p = &a;


printf("%d", *p);        // 10이 찍힘



p = NULL;              // 다시 초기화

*p = 10;                 // 에러

p = new int;           // new할당(메모리 자료형만큼 할당)

*p = 10;                 // 메모리를 할당했으니 에러 안난다.


printf("%d", *p);        // 10이 찍힘


delete p;                 // 메모리를 할당했으니 꼭 해제해줘야된다.

p = NULL;



그리고 c++에서 new할당을 할 때 중요한 것은 메모리관리이다.

new를 했으면 반드시 delete를 해줘야된다.

메모리를 할당했는데 int a;처럼 알아서 사라지는 게 아냐?가 아니다.

꼭 짝을 이뤄서 delete를 해줘야 메모리누수가 안 생기고

p의 값에는 NULL값을 넣어줘야 좋은 코드라 할 수 있다.

만약에 delete를 안하면 메모리누수가 생기고 그 메모리는 다시 쓸 수 없기 때문에 컴퓨터의 성능이 떨어진다.

이런 부분들이 많아지면 점점 느려져서 꼭 해줘야된다.(물론 재부팅하면 다시 메모리는 초기화된다)






반응형

'Programming > C++_C#' 카테고리의 다른 글

memmove함수  (0) 2017.04.05
[C++] 동적배열  (0) 2017.03.30
[C++] 논리연산자  (0) 2017.03.24
memcpy함수  (0) 2017.03.23
[C++] 문자열 대문자를 소문자로, 소문자를 대문자로  (0) 2017.03.20

댓글()