我编写了一段程序来读取一个数据文件,编好后我运行了一下,能正确读出数据。但当我关闭程序时,报错,错误信息是:projict projict1.exe raised exception class eaccessviolation with massage access violation at address 40006834.read of address be8fof84.下面是我编的代码:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "stdio.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
struct BaseParameter
{
TDateTime Current_Time;
unsigned int FirstChannel_No,LastChannel_No;
int Frequence;
int Gains;
};
struct ChannelParameter
{
unsigned int Channel_No;
AnsiString Signal_Name;
AnsiString Signal_Unit;
};
struct LscFileFormat
{
BaseParameter Base_Parameter;
ChannelParameter Chn_Para[3];
};
LscFileFormat lscrec;
FILE *fp;
int i;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
float data1[500],data2[500],data3[500];
if(OpenDialog1->Execute())
{fp=fopen(OpenDialog1->FileName.c_str(),"rb");
}
if (!feof(fp))
{
fread(&lscrec,sizeof(lscrec),1,fp);
fread(data1,4,500,fp);
fread(data2,4,500,fp);
fread(data3,4,500,fp);
}
fclose(fp);
for (i=0;i<500;i++)
{
ListBox1->Items->Add(FloatToStr(data1[i]));
ListBox2->Items->Add(FloatToStr(data2[i]));
ListBox3->Items->Add(FloatToStr(data3[i]));
}
}
我看了一下书,看不出是什莫原因,而且我运行时没错阿,fclose也使用了阿。请帮帮忙,看一下,我编写的代码有何错误,导致结束时报错。万分感谢。
struct ChannelParameter
{
unsigned int Channel_No;
AnsiString Signal_Name; //它是个类,要释放的 它必须知道内容是什么
AnsiString Signal_Unit;
};
fread(&lscrec,sizeof(lscrec),1,fp);//在这里你复制时给了个它不知道的类型
struct ChannelParameter
{
unsigned int Channel_No;
char Signal_Name[256];//改为这样就没有问题了
char Signal_Unit[256];
};