|
//---------------------------------------------------------------------------
BYTE tmp[] = {0x01, 0x01, 0x01};
//---------------------------------------------------------------------------
void __fastcall TForm1::CheckData(BYTE *Data)
{
if (0 == memcmp(Data, tmp, sizeof(tmp)))
ShowMessage("True");
else
ShowMessage("False");
}
//---------------------------------------------------------------------------
위와 같이 전역으로 선언되거나, static 키워드로 인해 전역적인 라이프 타임을 갖는 배열을
memcmp 로 비교하는 루틴인데요.
오류 확인차 Code Guard 옵션을 키고 동작시키는 중에
memcmp 에서 Access Overrun 이 발생한다고 나오네요. (BCB6, BDS2006)
Access overrun in process: Project1.exe(3104) - C:\소스 경로\Unit1.cpp#22
Attempt to access 4 byte(s) at 0x004891C0, that is at block 0x004891C0(=Project1.exe:0x02:0001C0) which is only 3 bytes long.
tmp 배열의 길이가 4 바이트 이상일 경우이거나 라이프 타임이 전역적이지 않을 경우에는 위 메시지가 뜨지 않네요.
현 프로그램에서 위와 비슷한 루틴(4Byte 미만 길이의 전역 배열 비교)이 종종 사용되는데 그냥 계속 사용해도 되는지 궁금합니다.
|