티스토리 뷰

Programming/C++

C++ - 메모리 해제

글그리 2017. 12. 30. 17:28

개요


메모리 생성시 주의해야 할 점에 이어서 해제시 주의해야 할 점에 대해서도 알아보자.

생성시 주의해야 할 점

해제는 실제로 해제를 할 때도 주의해야 하지만 해제를 하지 않고 함수를 종료하면 메모리 누수가 발생하므로 이 점도 주의해야 한다.






해제


해제는 delete 연산자를 사용한다. delete는 해당 메모리를 해제하고 다음번 new 등에 사용할 수 있도록 해준다. 하지만 delete를 잘못 사용하면 버그가 발생할 수 있으므로 주의해야 한다. 컴파일러가 판단할 수 있는 경우 컴파일 에러가 발생하기 때문에 코드 작성 중에 확인할 수 있지만 런타임 에러를 발생시키는 경우는 치명적이다.


이미 해제된 메모리를 다시 해제할 경우

void main()
{
ClassA *a = new ClassA();

delete a;
delete a; // error!
}


해제한 메모리에 접근할 경우

void main()
{
ClassA* a = new ClassA();

delete a;

a->foo(); // error!
}


생성하지 않은 메모리를 해제하려고 할 경우

void main()
{
ClassA* a;

delete a; // compile error!
}


실제로 new로 생성되지 않은 메모리 즉, 스택 메모리를 해제하려고 시도할 경우

void main()
{
ClassA a;
ClassA* p = &a;
delete p; // error!
}






마치며


예제 코드를 보면 설마 저렇게 짜는 바보가 있을까 하지만 프로그램이 커지고 여기서 생성한 메모리를 저기서 해제하는 경우가 많아지면 안전성을 보장하기 힘들다. safe delete를 구현하여 사용하거나 smart pointer를 사용하거나 자체적으로 가비지 콜랙팅을 구현하여 사용하면 오류를 줄일 수 있다.



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

C++ - 타입 캐스팅  (0) 2019.03.04
C++ - 클래스 관계 용어 정리  (0) 2018.03.02
C++ - 메모리 생성  (0) 2017.12.30
c++11 - std::shared_ptr로 thread safe callback 구현하기  (0) 2017.11.19
C++11 - std::bind  (0) 2017.09.21
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함