|
프로그램을 실행하여 (컴파일에런 없습니다.) 파일을 로드할 때 아래의 에러메세지가 나옵니다.
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할 때 문제가 있는 것 같은데 정확한 원인을 모르겠습니다.
같은 타이머내에서 데이타를 읽고(실험장치로부터 읽습니다) 쓰길 같이
하는 것도 원인이 될수 있나요?
디버깅을 하면 각 변수에 들어가는 값은 정확합니다.
고수님들!!
답변 꼭 부탁드립니다.
|