https://gall.dcinside.com/mgallery/board/view/?id=tcpl&no=3935


대충

int* a = new int[3];

이렇게 있으면 int 3개만큼 메모리 할당하고


delete[] a;

이거로 그만큼을 해제하잖아


근데 만약 계산 실수로

a[3] = 1;

이렇게 하면 할당된 메모리 벗어난 부분에 접근해서 생기는 다른 문제는 제쳐두더라도

이후에 delete[] a; 할때 heap corruption 뜨는데 delete[]가 정확히 처음 할당했던 만큼만 해제하는거 아니야?

검색해보면 new[]할때 크기가 헤드 세그먼트에 저장되서 나중에 delete[]가 정확히 얼마나 해제해야 할지 알 수 있다는데

그 크기보다 더 큰 범위를 확인하는거야? 저 예시로는 a[3]은 할당한 메모리 범위 밖이잖아


에러 메시지에 보면 힙버퍼 끝 이후에도 썼다고 나오는데 delete[]가 그게 쓰레기값인지 잘못해서 접근해서 쓴건지 알수가 있음?


요약하면

1. delete[]는 처음에 할당한 사이즈만큼만 해제하는거 아님?

2. 어떻게 사이즈 넘겨서 접근한걸 알고 에러띄움?

이라는거야


요전번에 관련된 문제 틀리고 복습해보다가 의문생겨서