vector의 push_back와 메모리 쪽 문제 같은데 어떻게 접근해야할 지 모르겠습니다.
안녕하세요?
얼마 전에야 STL의 vector을 이용해 보기 시작한 초보 프로그래머입니다.
형식이 일정한 로그 파일을 분석하는 프로그램을 만들기 위해서 vector을 사용하고 있는데요.
거의 모든 로그파일은 분석이 되는데 특정 몇몇 로그파일에서만(형식은 같습니다.) 디버그 에러
damage: before normal block (#37334) at 0x01053BF0.
이 발생하고 있습니다. break point를 사용해서 의심이 가는 부분을 좁혔는데요.
// Alarm 처리
else if ( !strcmp(vLogArray[i].csLogName.Left(5),"alarm") )
{
ModeTemp.tStartTime = NULL;
ModeTemp.tEndTime = NULL;
ModeTemp.lAlarmCode = ModeTemp.lAlarmCode | vLogArray[i].lAlarmCode;
ModeTemp.iAlarmUnify = 0;
( vAlarm[ Log2(vLogArray[i].lAlarmCode) ] ).push_back(ModeTemp);
}
위의 부분에서 push_back을 할 때 문제가 발생하는 것 같습니다.
로그 파일을 겉으로 볼때는 아무런 이상도 없는 것 같은데 문제가 발생하니 해결하지 못 하고 있는 상황입니다.
위의 부분은 ModeTemp라는 임시 클래스 파일의 변수들을 설정해주고 ModeTemp 클래스의 vector에 push_back해주는 것이며,
Log2는 제가 임시로 만든 2를 밑으로 하는 로그 파일입니다. (알람코드라는 것이 2의 n승으로 생성되기 때문에 배열의 인덱스에서는 log2를 해주어 원래 숫자로 돌립니다.)
처음 질문을 올려보는 것이어서 두서 없이 올린 것 같습니다. 어떻게 이 문제를 해결하기 위해 접근해야 할지 조언 좀 부탁드리겠습니다.
ModeTemp가 어떤
ModeTemp가 어떤 클래스의 인스턴스인지 알수가 없네요.
그리고 만약 포인터 관련 문제라면, 여기서 죽는다고해서 여기서 문제가 있다고 장담할순 없습니다.
적으신 것만으로는, vector라고 예상되는 부분 vAlarm[ Log2(vLogArray[i].lAlarmCode) ]의 인덱스 접근에서, 범위를 벗어난 인덱스로 접근했다 정도밖에 생각이 안나네요.
댓글 달기