Game Develop

[C++] Delete와 Delete[] 차이. 본문

C++/C++

[C++] Delete와 Delete[] 차이.

MaxLevel 2022. 7. 11. 19:59

내 포트폴리오에 SafeDelete를 구현하면서 관련 글이 나와서 읽었는데, 알아두면 좋을것 같아 따로 적는다.

일반 단일객체야 그냥 Delete 쓰면 되고, 문제는 배열을 동적할당 받은것을 해제할 때다.

 

int *t = new int[2];

 

delete t; // 에러

delete[] t; // Ok.

 

t라는 변수는 그저 주소를 담고있는 포인터변수니까 delete t; 해도 괜찮지 않을까..하는 작은 의구심을 가지고 있을 수 있겠지만, 우리의 목표는 new int[2]로 할당된 힙메모리의 영역을 전부 해제시키는거다. 

근데 그냥 delete t;만 하면 int 1개 정도의 메모리만 해제된다. 그리고 심지어 에러가 뜬다..

메모리누수 관련된 에러인데 12바이트의 메모리누수에 대한 에러가 뜬다.

우리가 할당한건 4바이트짜리 2개인데 왜 12바이트일까?

 

new연자를 통해 메모리할당을 할 시, 내부적으로 배열의 크기를 따로 저장하기위한 4바이트를 추가적으로 할당한다.

실제 힙메모리의 첫번째에 할당된다고 한다. 그렇기 때문에 12바이트다 (배열의 정보 4바이트 + 할당메모리 8바이트)

delete[] 를 할 경우, 배열의 크기정보를 이용해서 딱 맞게 메모리 해제를 해주기 때문에 배열의 동적메모리해제를 위해선 delete[]를 사용해야한다.

 

본문과 예시를 보고싶다면 아래링크...

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jamsuham75&logNo=221102478481 

 

delete와 delete[]의 차이점

오늘 C++ 동적 메모리 할당 관련 강의 중에 한 수강생이 이런 질문을 했다. new 연산자로 힙에 동적 배열...

blog.naver.com