반응형

member initializer list 사용시 주의

또다른 HEAP CORRUPTION DETECTED 문제 발생

컨테이너 클래스 vector 만들었는데

 

생성자 코드, member initializer list 를 통해 초기화

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  // 이런순으로 초기화 되는게 아니라

{}

 

 

멤버 변수 선언 순서로 초기화를 하기 때문에 주의를 하자

반응형

+ Recent posts