从网上复制了一份代码,编译时没有报错,可调试的时候出现
uhfr2.exe 中的 0xffffffff 处未处理的异常: 0xC0000005: 读取位置 0xffffffff 时发生访问冲突
请高手指教
程序中添加了消息响应函数SetTimer
错误出现在
void Cuhfr2Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString str,temp,temps;
BYTE WordPtr,Num,Mem, maskadr, maskLen, maskFlag,EPClength;
BYTE fPassword[4];
BYTE fOperEPC[320];
BYTE CardData[320];
BYTE EPC[5000];
int Errorcode,i,CardNum,Totallen;
int fCmdRet1,fCmdRet;
CString str3="\r\n";
CFile file;
CEdit* pEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1);
CEdit* pEdit3 = (CEdit*)GetDlgItem(IDC_EDIT3);
pEdit3->SetWindowText("请放卡.....");
fCmdRet1 = RR_Inventory_G2(&ComAddr, EPC, &Totallen, &CardNum, FrmHandle);
if(fCmdRet1==1)
{
GetDlgItemText(IDC_EDIT4,str);//起始地址
if(str=="")
return;
WordPtr=(BYTE)strtoul(str,NULL,16);//转换成16进制
GetDlgItemText(IDC_EDIT5,str);//读取字数
if(str=="")
return;
Num=(BYTE)strtoul(str,NULL,10)*2;
GetDlgItemText(IDC_EDIT6,str);//获取密码
if(str.GetLength()<8)
{
MessageBox("密码长度不能小于8!",NULL,MB_OK);
KillTimer(1);
}
int n=str.GetLength()/2;
maskFlag = 0;
maskadr = 0;
maskLen = 0;
EPClength=str.GetLength()/2;
for(i=0;i<n;i++)
{
fPassword[i]=(BYTE)strtoul(str.Left(2),NULL,16);
str=str.Right(str.GetLength()-2);
}
Mem = m_quyu.GetCurSel();
fCmdRet = RR_ReadCard_G2(&ComAddr, fOperEPC, Mem, WordPtr, Num, fPassword, maskadr, maskLen, maskFlag, CardData, EPClength, &Errorcode, FrmHandle);
if (fCmdRet == 0)
{
temps="";
temp="";
for(i=0;i<Num;i++)
{
temp.Format("%02X",CardData[i]);
temps=temps+temp;
}
UpdateData(FALSE);
//SetDlgItemText(0,temps);//显示数据
pEdit1->SetWindowText(temps);
//m_statusbar.SetPaneText(0,"读数据成功!");
pEdit3->SetWindowText("读数据成功,请换卡!");
file.Open("序列号.txt",CFile::modeCreate|CFile::modeWrite);//创建TXT文件
file.SeekToEnd();
file.Write(temps,lstrlen(temps));
file.Write(str3,lstrlen(str3));
file.Close();//关闭TXT文件
}
else
{
UpdateData();
pEdit3->SetWindowText("读数据失败,请重新读卡!");
}
}
else
{
return;
}
CDialog::OnTimer(nIDEvent);
}
报错的一行用红色标出来了,蓝色字为调用库文件函数
求高手指教
6 个解决方案
#1
蓝色字函数里的参数有可能没有值
#2
断点看一下是哪个参数没有值吧
#3
楼主会单步调试么?查看具体的信息。看看是什么地方访问非法内存空间了。
#4
楼主会单步调试么?查看具体的信息。看看是什么地方访问非法内存空间了。
#5
检查下出错前面的代码 看看对应值是否正常
#6
+ this 0x00000000 {Cuhfr2Dlg hWnd=???} Cuhfr2Dlg * const
nIDEvent CXX0030: 错误: 无法计算表达式的值
- temp <错误的指针> ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > >
+ str3 <错误的指针> ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > >
这几个显示指针错误,有好几个是显示:CXX0030: 错误: 无法计算表达式的值
这是怎么回事?
#1
蓝色字函数里的参数有可能没有值
#2
断点看一下是哪个参数没有值吧
#3
楼主会单步调试么?查看具体的信息。看看是什么地方访问非法内存空间了。
#4
楼主会单步调试么?查看具体的信息。看看是什么地方访问非法内存空间了。
#5
检查下出错前面的代码 看看对应值是否正常
#6
+ this 0x00000000 {Cuhfr2Dlg hWnd=???} Cuhfr2Dlg * const
nIDEvent CXX0030: 错误: 无法计算表达式的值
- temp <错误的指针> ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > >
+ str3 <错误的指针> ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char> > >
这几个显示指针错误,有好几个是显示:CXX0030: 错误: 无法计算表达式的值
这是怎么回事?