[에러창]
Windows가 Viewer.exe에서 중단점을 트리거했습니다.
힙이 손상되었거나 Viewer.exe 또는 여기서 로드한 DLL에 버그가 있을 수도 있습니다.
자세한 진단 정보는 [출력] 창을 참조하십시오.
bitmap_image 객체 초기화 코드에서 힙 손상이 발생했다.
- // 배열을 이미지로 만든다.
- int CArray2Bmp::SetArrayBitmap(unsigned char *mg, unsigned char *ph, char* savepath, bool byteOrder, ComplexData data)
- {
- int ns = this->ns;
- int nl = this->nl;
- bool ImageByteOrder = byteOrder; // TODO : 바이트 순서 체크해야함..
- bitmap_image image_data(ns, nl);
- ...
(뜬금없이 왜..)
[출력]
Critical error detected c0000374
Windows가 Viewer.exe에서 중단점을 트리거했습니다.
힙이 손상되어 Viewer.exe 또는 여기서 로드한 DLL에 버그가 있을 수도 있습니다.
SBAViewer.exe에 포커스가 있을 때 사용자가 F12 키를 눌렀기 때문일 수도 있습니다.
자세한 진단 정보는 [출력] 창을 참조하십시오.
디버깅 결과 메모리 관리 함수를 사용한 뒤로부터 발생하는 것을 발견하였다.
- // 외부에서 색상값을 받아온다.
- void CArray2Bmp::SetColor(float r[360], float g[360], float b[360])
- {
- // 받아온 색상값 복사
- memcpy(m_red, r, sizeof(float) * 360);
- memcpy(m_grn, g, sizeof(float) * 360);
- memcpy(m_blue, b, sizeof(float) * 360);
- }
검색 결과 - 힙 손상의 여러 원인
1. 메모리 할당 영역 밖에 쓰기를 시도 했다.
2. 메모리 초기화나 삭제를 두번 이상 했다.
3. 클래스의 모든 변수를 초기화 시켜주지 않았다.
등등 여러가지이지만
이번 힙 손상의 원인은 메모리를 할당해준 변수의 초기화를 잘못해줘서였다.
[수정전]
- CArray2Bmp::CArray2Bmp()
- {
- // 배열 초기화
- for(int i=0; i<360; ++i)
- {
- m_red[i] = NULL;
- m_grn[i] = NULL;
- m_blue[i] = NULL;
- }
- }
[수정후]
- CArray2Bmp::CArray2Bmp()
- {
- // 배열 초기화
- memset(m_red, NULL, sizeof(float) * 360) ;
- memset(m_grn, NULL, sizeof(float) * 360) ;
- memset(m_blue, NULL, sizeof(float) * 360) ;
- }
이렇게 수정하니 에러가 없어졌당..
하지만, 왜 하필이면 힙 손상이 저 코드에서 일어났는지는 아직도 모른다...
'오늘의.. > 오늘의 뻘짓' 카테고리의 다른 글
[C#] 'TypeInitializationException이(가) 처리되지 않았습니다' 에러 (2) | 2016.03.03 |
---|---|
[C++] LNK2019 에러 발생 시 해결 방법 (4) | 2015.07.21 |
[C#] 에러 : GDI+ 일반 오류 (0) | 2015.06.26 |
[C#] PropertyGrid Combobox String (0) | 2015.03.25 |
[C++] 파일 읽을때 깨짐 현상 (0) | 2014.11.03 |