일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 2294
- UE5
- UnrealEngine4
- UnrealEngine5
- DeferredRendering
- 오블완
- RVO
- 1563
- Frustum
- Programmers
- IFileDialog
- 줄 세우기
- 백준
- 티스토리챌린지
- 프로그래머스
- 팰린드롬 만들기
- baekjoon
- RootMotion
- GeeksForGeeks
- algorithm
- DirectX11
- NRVO
- directx
- const
- winapi
- Unreal Engine5
- C
- softeer
- C++
- 언리얼엔진5
- Today
- Total
Game Develop
[C++] Delete와 Delete[] 차이. 본문
내 포트폴리오에 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
'C++ > C++' 카테고리의 다른 글
[C++] 상속받은 가상함수에는 virtual,override 생략해도된다. (0) | 2022.09.01 |
---|---|
[C++] Char*와 Char[]의 차이. (0) | 2022.08.17 |
[C++]초기화리스트(Initilizer List)를 사용해야하는 경우. (0) | 2022.07.09 |
[C++] const 관련 정리. (0) | 2022.01.05 |
[C++] 이동생성자. (0) | 2021.07.12 |