|
전 코드가드 참고만 합니다. 코드가드 자체에 에러가 있는듯 생각되어서요.
아래처럼 테스트 해보세요..전 에러가 나거든요.
파일->뉴->어플
컴파일 옵션에서 코드가드 선택
저장후 실행..
5.0 때부터 계속 되는 증상.....
BDS 는 아직 해보질 못해서... ^^
공부맨 님이 쓰신 글 :
: //---------------------------------------------------------------------------
: 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 미만 길이의 전역 배열 비교)이 종종 사용되는데 그냥 계속 사용해도 되는지 궁금합니다.
|