C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[3526] Re:EAcess Violation Error문제는??
[] 3815 읽음    2000-05-28 00:00

제시하신 소스 코드로는 원인을 충분히 밝힐 수는 없지만 의심스러운 곳을 살펴보겠습니다.
그리고 참고로 어디에 문제가 있는지 알아보려면 디버깅 옵션을 켜고 프로그램을 전체적으로 다시 컴파일한 후 아래의 자료 적재 부분의 선두에 커서를 둔 상태에서 F4 키를 누르면
프로그램이 실행되어 그 곳에서 일단 멈춥니다. 그런 다음 F8키를 누르면 한 줄씩 실행됩니다. 문제가 있는 부분에서 오류가 발생하며 프로그램 실행이 멈추겠지요.
또한 현재 커서 위치의 코드가 함수를 호출하는 것일 경우 F7키를 누르면 그 함수 코드 부분으로 옮겨갑니다.  그리고 [View] 메뉴의 Watches를 클릭하면 창이 뜨는데 그 곳에서 더블클릭한 후 감시하고자 하는 변수를 지정하면 코드를 실행하며 변하는 값을 볼 수 있습니다.

1. 일단 배열의 개수가 충분한지 확인합니다.(물론 이 문제라면 "out of index" 오류가 발생하겠지만 그래도 한 번 해봅시다.)
데이터 저장 부분의 dat=fopen("c:\\Data\\data.dat","wb+");과
데이터 적재 부분에 while문이 있는 것으로 보아 values형의 구조체 배열에 값을 읽어 들이는 것으로 판단됩니다.
그렇다면 자료에 사용할 values 형의 배열을 충분히 마련해 두어야 겠지요.
보통은 아래와같이 합니다.
#define MAX_DATA 100
struct values *RealData[MAX_DATA];
int DataCount;
로 해두고 파일에서 읽어 들일 때 메모리를 할당하고 동시에 그 카운터도 1증가시켜 주는 식으로 합니다. 물론 읽어 들일 수 있는 자료의 수는 XXX이하겠지요(0에서 XXX-1까지).

2. 그리고 자료를 적재하는 부분의 아래 두 부분이 상당히(가장) 의심스럽습니다.
    num_data=StrToInt(real_data.time);
    MyDateTime=real_data.date;
real_data.time과 real_data.date은 char 배열인데 이 배열에 자료를 적재한 후 과연 끝에 NULL 종료 문자가 있을 것인가가 의심스럽습니다.
이 것을 알아보려면 자료 저장 부분의 아래 두 곳을 검사해보야 합니다.
    strcpy(real_data.date,MyDateTime.c_str());
    strcpy(real_data.time,ReactTime.c_str());
MyDateTime과 ReactTime의 길이가 각각 29와 19를 넘지 않아야 합니다.



소영 님이 쓰신 글 :
: 프로그램을 실행하여 (컴파일에런 없습니다.) 파일을 로드할 때 아래의 에러메세지가 나옵니다.
:
: Project Beta.exe raised exception class EAcess Violation with messgae.
: 'Access violation at address 0040294C. Read of address FFFFFFFF'.
: Process Stopped. Use Step or Run to continue.
:
: 코딩을 대략  적으면...
:
: //Struct
:
:  struct values
: {
:     char date[30];
:     char time[20];
:     int  valvetime[10];
:     int  injecttime_s;
:     float set_rtemp;
:     float set_jtemp;
:     float temp1;
:     float jacket;
:     float heating;
:  
: };
:
: values real_data;
:
: //Loading  data...
:
:     Form7->Memo1->Lines->LoadFromFile("c:\\Data\\data.cfg");  //<---- Memo1->Lines->SaveToFile("c:\\Data\\data.cfg"); 이런 식으로 다른폼(Form7)에서 따로 만듦   
:     dat=fopen("c:\\Data\\data.dat","rb+");
:     int flag;
:     num_data=0;
:     fseek(dat, 0L, SEEK_SET);
:
:     while(1)
:     {
:         flag=fread((values *)&real_data,sizeof(real_data),1,dat);
:         if(flag<=0) break;
:         // set_point calc.
:         sampletime_s=real_data.injecttime_s;
:         for(int i=0;i<5;i++)
:           soltime[i]=real_data.valvetime[i];
:         real_temp1=real_data.temp1;
:         real_jacket=real_data.jacket;
:         real_control_heat=real_data.heating;
:
:         num_data=StrToInt(real_data.time);
:         MyDateTime=real_data.date;
:         Edit4->Text=IntToStr(sampletime_s);
:         Edit1->Text=IntToStr(soltime[0]);
:         Edit2->Text=IntToStr(soltime[1]);
:         Edit3->Text=IntToStr(soltime[2]);
:         Edit5->Text=real_data.set_rtemp;
:         Edit6->Text=real_data.set_jtemp;
:
:     }
:
:     fclose(dat);
:
: //Writing Data...
:   
:     dat=fopen("c:\\Data\\data.dat","wb+");
:     real_data.injecttime_s=sampletime_s;
:     for(int i=0;i<5;i++)
:          real_data.valvetime[i]=soltime[i];
:     real_data.temp1=real_temp1;
:     real_data.jacket=real_jacket;
:     real_data.heating=real_control_heat;
:     real_data.set_rtemp=StrToFloat(Edit5->Text);
:     real_data.set_jtemp=StrToFloat(Edit6->Text);
:     real_data.set_rtemp=set_rtemp;
:     real_data.set_jtemp=set_jtemp;
:
:     strcpy(real_data.date,MyDateTime.c_str());
:     strcpy(real_data.time,ReactTime.c_str());
:     fseek(dat, 0L, SEEK_END);
:     fwrite(&real_data,sizeof(real_data),1,dat);
:     fclose(dat);
:
: 아직 초보라 그런지 디버깅은 이런 에러는 어렵군요. T.T
: 파일을 Writing할 때 문제가 있는 것 같은데 정확한 원인을 모르겠습니다.
: 같은 타이머내에서 데이타를 읽고(실험장치로부터 읽습니다) 쓰길 같이
: 하는 것도 원인이 될수 있나요?
: 디버깅을 하면 각 변수에 들어가는 값은 정확합니다.
: 고수님들!! 
: 답변 꼭 부탁드립니다.
:

+ -

관련 글 리스트
3509 EAcess Violation Error문제는?? 소영 3808 2000/05/24
3526     Re:EAcess Violation Error문제는?? 3815 2000/05/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.