|
BC++로 프로그램을 처음 짜는 초보 개발자입니다. 작성중인 프로그램에서
localtime() 함수를 통해서 현재 시각을 뽑아내고 있습니다. 코드를
간략하게 적어보면 이렇습니다.
cmdo_time_t cmdo_gettimeofday(void)
{
cmdo_time_t cur_time;
time_t timer;
struct tm *tblock;
timer = time(NULL);
tblock = localtime(&timer);
/* 처리하는 부분입니다. */
cur_time.year = (WORD)(tblock->tm_year + 1900);
cur_time.month = (BYTE)(tblock->tm_mon + 1);
cur_time.day = (BYTE)(tblock->tm_mday);
cur_time.hour = (BYTE)(tblock->tm_hour);
cur_time.min = (BYTE)(tblock->tm_min);
cur_time.sec = (BYTE)(tblock->tm_sec);
/* 처리하는 부분 끝 */
return cur_time;
}
저는 localtime() 함수는 내부적으로 tm struct를 static으로 선언해서 내부에
가지고 있고, 호출될때마다 그 내용에 덮어쓴 다음 tm struct의 포인터를 리턴해준다고
알고 있었습니다. 그런데 이 코드를 추가한 이후, "프로그램을 종료시킬때면"
항상 코드가드가 에러를 잡아냅니다. 에러의 내용은 첨부파일과 같습니다.
즉 첨부파일에서 보시는 것과 같이, 아마도 내부적으로 BC++5.0은 localtime() 함수
안에서 첫번째 요청에 malloc()을 이용해서 메모리를 잡아 두는 것 같습니다. (당연히
localtime() 호출 후 free(tblock)을 하면 또 다른 에러를 발생시킵니다.) 그래서
프로그램이 종료될때 메모리 공간을 free하다가 이 부분을 에러로 찾아내는 것 같은데...
가만두자니 찜찜하고, 혼자서는 해결방법이 없어 이렇게 질문을 올려 놓습니다. 이런
문제를 경험하신 고수분들의 조언을 기다립니다.
|