|
Access Violation은 try {} catch {} 구문에 잡히지 않습니다.
정상 예외가 아니라 메모리 비정상 사용에 의한 커널 오류라서 그렇습니다.
가장 간단한 방법은 C++빌더에서 지원해주는 CodeGuard를 enabled 시키고 컴파일해보는 것입니다.
메모리 비정상 사용과 메모리 누수를 감시해서 알려주니 그것들을 해결하다보면
자연스럽게 완벽한 프로그램이 됩니다.
CodeGuard 켜는 방법
Project -> Option 에서 찾아보시면 됩니다. (C++빌더 버젼마다 있는 위치가 달라서 =_=)
알론소 님이 쓰신 글 :
: 밑에도 올렸지만
: 아무리해도 해결이 안되서요
: 도와주세요.ㅠㅠ
:
: access violation 이 오류가 뜨는데
: 함수안에 함수안에 함수안에 try catch 이런문 써서
: 어느 함수가 문젠지 로그로 남기게해서 했는데
:
: 제딴에서는 로그남긴거보고 이함수에서 걸리는구나해서
: 고쳤는데 또 그러는거에요
:
: 그래서 또 찾아봤는데
:
: now->second.m_pObject->Init();
: 여기서 걸리길래
:
: now 같은경우 map iterator한거구요
: m_pObject 는 객체구 Init()여기서 문제구나해서
:
: Init()함수로 가서 또 try catch 써서 로그남기게해놨어요
: 그래서 걸리는 함수가 또 세개나있더라구요
:
: 그래서 그함수보니까
: 거긴 select해서 전역변수에 넣는거거든요 예를들어서
: 아래소스처럼
:
: String strSQL, DataName[STRING_CNT], strMsg, str_info;
: TStringList *StringList_TFDT;
: int j = 0;
:
: StringList_TFDT = new TStringList;
: StringList_TFDT->Clear();
:
:
: strSQL.sprintf("SELECT T1.TFDT_STAT FD_01 \
: FROM VDS_TFDTSTAT T1, VDS_TFDT T2 \
: WHERE T1.TFDT_ID = T2.TFDT_ID AND T2.VDS_ID = '%s' \
: ORDER BY T2.TFDT_LANE ASC, T2.TFDT_ID ASC", tcdv_info.tcdv_id);
:
:
: DataName[0] = "FD_01";
: DataModule_DB->SelectSQL1(StringList_TFDT, strSQL, DataName, 1);
:
: try
: {
: if ( StringList_TFDT->Count )
: {
: for ( int i = 0; i < StringList_TFDT->Count; )
: {
: tcdv_stat.tfdt_stat[i].tfdt_stat = StringList_TFDT->Strings[i].ToInt();
: tcdv_stat.tfdt_stat[i].itfdtstat = 1;
: i++;
: } // end of for
: } // end of if
: else
: {
: for(int i = 0; i < tcdv_stat.tfdt_cnt; i++)
: {
: tcdv_stat.tfdt_stat[j].tfdt_stat = 1;
: tcdv_stat.tfdt_stat[j].itfdtstat = 0;
: }
: }
: }
: catch( Exception &e)
: {
: AnsiString error;
: error.sprintf("error : %s, %s",e.Message, tcdv_info.tcdv_id);
: AddMsg(error.c_str());
: }
: //2010.12.02
: if(tcdv_stat.tfdt_cnt)
: {
: for(int i = 0; i < tcdv_stat.tfdt_cnt; i++)
: {
: if(tcdv_stat.tfdt_stat[i].itfdtstat == 0)
: SaveTFDTStat(i);
: }
: }
:
: delete StringList_TFDT;
:
:
: 이런내용이거든요 근데 여기가문제라면 또 안에 try catch해서 로그남기게했으니까
: 여기 내용이떠야하는데 뜨지않구 Init()함수 에서 뜨니까..
: exception 이 잘 못잡아준다그러는거알긴하는데
: 어떻게 이걸 찾아야할지모르겠고 소스를봐도 아이래서 문제겠지해서
: 조취를 취해도 도무지 모르겠더라구요 ㅠㅠ
: 진짜 저번주부터 계속 잡고있는데
: 이게 통신이 불안정하거나 이럴때 뜨는데 불안정하는경우가
: 별로 없잖아요 그리고 항상 새벽에 이렇게 떠서 어떻게해야할지모르는거에요
: 근데 이게 일어나는 시점이 통신이 끊어졌더라던지 아니면 불안정할때
: 떴거든요
: 좀 어떤 문제인지 조언이나 도와주세요.ㅠㅠ
|