좋은 질문이네요. 일단 아실 듯 싶은 지식을 다시 언급해 드리겠습니다.
new랑 delete는 쌍이 맞아야 한다.
malloc과 free는 쌍이 맞아야 한다.
tree는, stack에 할당된 친구입니다. 그 어디에서도 new로 할당된 적이 없습니다.
tree의 원소들은 주소를 가지고 있을 텐데. 그것들은 실 데이터를 가리키고 있고, 그 실 데이터들이 new로 할당된 것이겠죠.
그런데, 이 tree 배열을 왜.. delete로 지우시나요? 결국 이건 new로 할당받지도 않은 공간을 해제하려고 했는데..
왜 오류가 발생하냐는 것입니다.
이것은 delete[] tree 를 해도 마찬가지일 겁니다.
newmin2018 4년 전 2
1991 번 Tree node를 class 로 생성하여 구현하였는데요.
주석에 있는 delete [] tree를 하면 포인터를 힙에 반환할때 오류가 뜨더라구요
얇은 복사 때문이라고 그러는더라구요. 얇은 복사 때문에 객체가 소멸된때 반환된 포인터를 한번더 주석 처리한 부분에서 반환하기 때문에
없는 값을 반환하는거나 마찬가지라 하는데, 어디서 중복된 반환이 이루어졌는지 모르곘습니다.
깊은 복사생성자를 구현하거나 저부분을 주석처리하니 오류가 사라졌습니다.
복사생성자의 개념은 대충 알고있는데, 왜 저의 코드에서 포인터를 힙에 반환할때 문제가 발생한건지 간단하게 설명해주실분 있으신가요?