반응형
member initializer list 사용시 주의
또다른 HEAP CORRUPTION DETECTED 문제 발생
컨테이너 클래스 vector를 만들었는데
resize 함수에서 , 동적 할당된 배열이므로, delete[] m_pArray를 했는데 HEAP CORRUPTION DETECTED 발생
원인
member initializer list 를 통한 초기화를 할때
m_iSze, m_iCapacity, m_pArray 순으로 초기화 되길 바랬지만, 컴파일러는 멤버 변수 선언 순서대로 초기화 한다, 그래서 m_pArray 부터 초기화를 했고 m_iCapacity가 0값인 상태에서 m_iCapacity + 2를 했으니 실상
2만큼의 크기를 가지는 배열을 초기화 한것
선언 순서를 바꾼뒤 다시 빌드했다
이후 더 이상 HEAP_CORRUPTION_DETECTED 런타임 에러가 발생하지 않았다.
결론
member initializer list 를 통한 멤버 변수 초기화를 할때는,
생성자()
: 순서1, 순서2, 순서3 // 이런순으로 초기화 되는게 아니라
{}
멤버 변수 선언 순서로 초기화를 하기 때문에 주의를 하자
반응형
'C++ > Error, Exception, 주의' 카테고리의 다른 글
C언어, Queue, pop() 구현하던 도중 shallow copy와 비슷한 문제 발생 (0) | 2020.03.18 |
---|---|
주의_1 while 문 안에 switch를 사용할 때 (0) | 2020.03.07 |
EX02 HEAP CORRUPTION DETECTED (0) | 2020.03.07 |
EX01_읽기 엑세스 위반 (0) | 2020.03.07 |