程序调试时出现“Access Violation”

dengzhu 2010-03-05 04:02:42
我用VC写了个在实验数据中寻找需要的数值,每个实验文件中有2034个数据,其中波长和强度值一一对应。主要代码如下:

void CFindPeakDlg::OnBegin()
{
// TODO: Add your control notification handler code here

CFileDialog openPre(true,"*.ROH",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
"待处理文件(*.ROH)|*.ROH|所有文件(*.*)|*.*||");
DWORD MAXFILE = 256000; //设置缓冲区,
openPre.m_ofn.nMaxFile = MAXFILE;
char* pc = new char[MAXFILE];
openPre.m_ofn.lpstrFile = pc;
openPre.m_ofn.lpstrFile[0]=NULL;

int index1=0,x=0;//文件数量统计

if(openPre.DoModal()==IDOK)
{
//启动EXCEL服务器,设置初始属性
_Application app;
Workbooks books;
_Workbook book;
Sheets sheets;
_Worksheet sheet;
Range range;
LPDISPATCH lpDisp;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

//Create Excel server (start Excel)
if(!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("Can't start Excel server! ");
return;
}
app.SetVisible(TRUE); //set Excel visible
app.SetUserControl(TRUE); //user can operate Excel

books=app.GetWorkbooks();
book=books.Add(covOptional);
sheets=book.GetSheets();
sheet=sheets.GetItem(COleVariant((short)1));
range.AttachDispatch(sheet.GetCells(),TRUE);

POSITION posi= openPre.GetStartPosition();
CString sPath="";

m_Wavelength2=290.566;//定义需要寻找的数值的波长和通道;
m_Slaver2=2;

while (posi!= NULL)
{
sPath=openPre.GetNextPathName(posi);//每次循环都得到下一个文件路径
FILE *fd=fopen(sPath,"rb");
float buf[2056];
fread(buf,sizeof(buf[0]),2056,fd);//读取二进制文件,放到buf数组中

float xbuf[2034];
float ybuf[2034];
for (int j=0;j <2034;j++)
{
xbuf[j]=buf[1]+buf[2]*j+buf[3]*j*j+buf[4]*j*j*j+buf[5]*j*j*j*j;//算出波长xbuf; ybuf[j]=buf[j+19];//与波长对应的强度值;
}


if (0!=m_Wavelength2)
{
if (m_Slaver2=2&&xbuf[1]>288&&xbuf[1] <292)
{
for (int k=0;k <2034;k++)
{
if ( fabs(xbuf[k]-m_Wavelength2) < 0.001) //波长与给定的相等;
{
x=++index1;
range.SetItem(_variant_t((long)(x)),_variant_t((long)1),_variant_t(ybuf[k]));
break;//把数值输出到EXCEL,并且跳出FOR循环,寻找下一个文件;
}
}
}
}
}
}
}
程序运行后,当寻找到64个文件时,程序就会出错。调试的时候,就会出现“Access Violation”.
...全文
291 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nowala 2010-03-05
  • 打赏
  • 举报
回复
代码太乱。。。不方便阅读
bsr2009 2010-03-05
  • 打赏
  • 举报
回复
肯定是访问了非法的内存了。内存是不是被修改了?
tanwei1002 2010-03-05
  • 打赏
  • 举报
回复
代码太乱 。。。
不错出现这种错误存储是数组越界或者指针没有分配内存,反正就是访问了非法的内存区域
你自己再仔细看看数组越界,或者指针变量没出问题没有
岁月小龙 2010-03-05
  • 打赏
  • 举报
回复
80%是数组越界或空指针。================
Eleven 2010-03-05
  • 打赏
  • 举报
回复
程序运行后,当寻找到64个文件时,程序就会出错。调试的时候,就会出现“Access Violation”.

-------------------------------------------------
无语,你Debug调试一下看看哪里出错啊。。。。。。。。。。。。。
WizardK 2010-03-05
  • 打赏
  • 举报
回复
下次贴代码,给点格式出来吧

寻找到第64个文件时,是上述代码的哪一步?

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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