c++ builder 关于access violation ar write of address

qq_24345541 2018-05-09 03:36:14
提取一实验数据有40组每组402个我用c++ builder 便的运行时出现access violation 错误,由于本人水平能够有限,求高人解答,
附上代码及数据,数据是图片
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop

#include "ttg.h"

#include "YOKO.h"
#include "wbsfunc.h"


//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TSweepForm *SweepForm;
//---------------------------------------------------------------------------
__fastcall TSweepForm::TSweepForm(TComponent* Owner)
: TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TSweepForm::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TSweepForm::Button1Click(TObject *Sender)
{

char *memo[] = {

"实验日期: ", // 00
"实验员: ", // 02
"备注: ", // 03
"个数: ",

" N B f Q Y C f k f f",
"------+-------+-------+-------+-------+-------+-------+-------+-------+" };

FILE *rfp, *wfp;
AnsiString s;

struct ReadData { double fo,Ymo; } *RD[401];

double Ym1,Ym2,Ymax,Ph1,Ph2;
char nblt[20];




char ibuf[3][80], str[80];
char imemo[40][256], hbuf[60][256];
int ndata;
char iww[410][80];
double ffs, ffe, if0, f0, f1, f2, fQm;
double iREAL, REAL0, iIMAG;
double dx1, dx2,ss,fd1,fd2,fd,yms,k33;
int j,n, nn,m;
char wk0[256],wk[256], wk1[256], buf[256],wk2[256],wk3[256],wk4[256],wk5[256],wk6[256],wk7[256];
float Lmax;
char bbuf[256][10];


for (n = 0; n<4; n++) memset(imemo[n], 0, 80);

strcpy(str, LoopForm->OpenDialog5->FileName.c_str());
rfp = fopen(str, "rt");





for (n = 0; n<4; n++) {
fgets(buf, 80, rfp);
buf[strlen(buf) - 1] = 0;
sscanf(buf,"%*[^:]:%*[ ]%s",imemo[n]);
}



for (n = 0; n<6; n++) {
strcpy(hbuf[n], memo[n]);
if (n<4)strcpy(hbuf[n] + 14, imemo[n]);
}


for (n = 6; n<60; n++) { memset(hbuf[n], ' ', 256); hbuf[n][255] = 0; }

for (ndata = 0; ndata < 60; ndata++) {

fgets(str, 80, rfp);
str[strlen(str) - 1] = 0;
strcpy(ibuf[ndata], str);

if (feof(rfp)) break;

if (ndata == 0) sscanf(ibuf[0] + 7, "%f", &Lmax);
sprintf(wk, "%3d %6.1f %s ", ndata, Lmax, ibuf[1]);


for (n = 0; n < 402; n++) {
fgets(iww[n], 80, rfp);
sscanf(iww[n], "%d %lf %lf", &nn, &Ym1, &Ph1);

}

sscanf(iww[0], "%lf %lf", &ffs, &ffe);
ffs=ffs/1000; ffe=ffe/1000;

f0 = 0;
Ymax=0;

for(n=2;n<403;n++) {
sscanf(iww[n],"%lf %lf %lf",&if0,&Ym1,&Ph1);
dx1=ffs+(ffe-ffs)/400.0*(double)(n-2);
if(Ymax<Ym1) { f0=dx1; Ymax=Ym1; nn=(int)if0; }

}

yms=Ymax/sqrt(2.0);
f2=0;
for (n = 1; n < 402; n++) {
sscanf(iww[n], "%lf %lf %lf", &if0, &Ym2, &Ph1);
if ((Ym1 >= yms) && (yms>Ym2)) {
if ((Ym2 - Ym1) != 0.0) {
s = (yms - Ym1) / (Ym2 - Ym1) + (double)(n - 2);
}
else {
s = 0.0;
}
f2 = s * (ffe - ffs) / 400.0 + ffs;
break;
}
Ym1 = Ym2;
}

f1=0;
for (n = 401; n > 1; n--) {
sscanf(iww[n], "%lf %lf %lf", &if0, &Ym1, &Ph1);
if ((Ym1 <= yms) && (yms<Ym2)) {
if ((Ym2 - Ym1) != 0.0) {
s = (yms - Ym1) / (Ym2 - Ym1) + (double)(n - 1);
}
else {
s = 0.0;
}
f1 = s * (ffe - ffs) / 400.0 + ffs;
break;
}
Ym2 = Ym1;
}
fQm=0;
if ((f2 - f1) != 0.0) fQm = f0 / (f2 - f1);

fd1 = 0.0; fd2 = 0.0;
Ph1 = 0.0; Ph2 = 0.0;

for (n = 1; n < 402; n++) {
sscanf(iww[n], "%lf %lf %lf", &if0, &Ym2, &Ph2);
if (n == 2) { Ph1 = Ph2; continue; }
if (Ph1*Ph2<0.0) {
if (Ph1>Ph2) {
if ((Ph2 - Ph1) != 0.0) {
s = (-Ph1) / (Ph2 - Ph1) + (double)(n - 2);
}
else {
s = 0.0;
}
fd1 = s * (ffe - ffs) / 400.0 + ffs;
}
else if (Ph1<Ph2) {

if ((Ph2 - Ph1) != 0.0) {
s = (-Ph1) / (Ph2 - Ph1) + (double)(n - 2);
}
else {
s = 0.0;
}
fd2 = s * (ffe - ffs) / 400.0 + ffs;
}
}

Ph1 = Ph2;
if ((fd1 != 0.0) && (fd2 != 0.0)) break;
}

fd = fd2 - fd1;
if (fd != 0.0){
k33 = 1.0 / sqrt(0.405*f0 / fd + 0.81);
}
else k33=0; //以下結果保存



sprintf(wk0, "%3d", ndata+1);
sprintf(wk, "%5.f", Lmax+ndata);
sprintf(wk1, "%7.2f", f0);
sprintf(wk2, "%7.2f", fQm);
sprintf(wk3, "%7.2f", Ymax);
sprintf(wk4, "%7.2f", fd);
sprintf(wk5, "%7.2f", k33);
sprintf(wk6, "%7.2f", ffs);
sprintf(wk7, "%7.2f", ffe);

memcpy(hbuf[ndata + 6] , wk0, strlen(wk0)); //N
memcpy(hbuf[ndata + 6] + 5 , wk , strlen(wk)); //B
memcpy(hbuf[ndata + 6] + 13, wk1, strlen(wk1)); //f
memcpy(hbuf[ndata + 6] + 22, wk2, strlen(wk2)); //f
memcpy(hbuf[ndata + 6] + 29, wk3, strlen(wk3)); //Ym
memcpy(hbuf[ndata + 6] + 43, wk4, strlen(wk3)); //f
memcpy(hbuf[ndata + 6] + 51, wk5, strlen(wk3)); //k
memcpy(hbuf[ndata + 6] + 61, wk6, strlen(wk3)); //f
memcpy(hbuf[ndata + 6] + 69, wk7, strlen(wk3)); //fe

hbuf[ndata + 6][96] = 0;
}
fclose(rfp);
s = LoopForm->OpenDialog5->FileName;
j=AnsiPos("ipa",LowerCase(s));
s.Delete(j,3);
s.Insert("tlg",j);
strcpy(str,s.c_str());

wfp=fopen(str,"w");

for(n=0;n<ndata+6;n++) fprintf(wfp,"%s\n",hbuf[n]);
fclose(wfp);
}
//---------------------------------------------------------------------------




...全文
893 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
WaveYang 2018-05-11
  • 打赏
  • 举报
回复
内存非法访问, 通常是因为指针未赋值,赋值错误, 或者数组越限造成的, 请楼主仔细检查, 也可能是程序的其他地方指针溢出了, 无意修改了你这个地方的指针,这样你在本单元是找不出问题的。

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧