c++ - 调用堆栈中的访问冲突
问题描述
我收到此错误:Cts.exe 中 0x003f31b5 的第一次机会异常:0xC0000005:访问冲突读取位置 0xe1672514。
当我使用调用堆栈时,它会吐出这个方法。我具体评论了哪一行。
当我在程序运行时从调试中单击取消时,就会发生冲突。
在底部,我也包含了我的 Cancel 方法。
void CInpINS::OnTimer(UINT nIDEvent)
{
int i,j, totalbytes;
bool bfilefnd = false;
CConvb Convb;
CString tmp;
for (i = 0; i < (int) m_nNumMsgs; i++) {
m_pBDF[i]->m_numrecs = m_pIDF[i]->m_numrecs;
for (j = 0; j < MAXBYTECNT; j++) {
OutBytes[j] = 0;
}
// set first 5 words
OutBytes[1] = m_nSelectedMsgNum[i];
OutBytes[3] = (int)m_pIDF[i]->IDFFields[m_pIDF[i]->m_numrecs-1].ebyte/2+6; // THIS LINE SPECIFICALLY
CConvb Convb;
if (i == 0) m_dTimeofTransmission += m_nRate;
tmp.Format("%20.0f",m_dTimeofTransmission);
Convb.CONV_Timetag_to_Bytes(tmp, OutBytes[4], OutBytes[5],
OutBytes[6], OutBytes[7],
OutBytes[8], OutBytes[9],
OutBytes[10], OutBytes[11]);
// start at 11 because byte 0 and 1 are input or output msg, then bytes 2 and 3 are word count
// bytes 4 through 11 are gps time
for (j = 0; j < m_pBDF[i]->m_numrecs; j++) {
if ((j == 0)||(j == 1))
{
Convb.ConvFld(tmp,
m_pIDF[i]->IDFFields[j].bbyte+9,
m_pIDF[i]->IDFFields[j].ebyte+9,
m_pIDF[i]->IDFFields[j].bbit,
m_pIDF[i]->IDFFields[j].ebit,
m_pIDF[i]->IDFFields[j].dtype,
m_pIDF[i]->IDFFields[j].Desc,OutBytes);
}
else
{
Convb.ConvFld(m_pBDF[i]->BDFFields[j],
m_pIDF[i]->IDFFields[j].bbyte+9,
m_pIDF[i]->IDFFields[j].ebyte+9,
m_pIDF[i]->IDFFields[j].bbit,
m_pIDF[i]->IDFFields[j].ebit,
m_pIDF[i]->IDFFields[j].dtype,
m_pIDF[i]->IDFFields[j].Desc,OutBytes);
}
}
totalbytes = OutBytes[3];
m_pDoc->sendmsg(totalbytes, false, OutBytes);
tmp.Format("Sent Message");
AddToListBox(tmp);
UpdateData(false);
m_nNumSent +=1;
}
}
这是取消方法:
void CInpINS::OnCancel()
{
if (m_bSetIDF)
{
for (int i = 0; i < (int) m_nNumMsgs; i++) {
delete m_pIDF[i];
delete m_pIDFCustm[i];
delete m_pBDF[i];
}
m_bSetIDF = false;
}
AfxGetMainWnd()->PostMessage(WM_GOODBYEINPINS, IDOK);
CDialog::OnCancel();
}
这是在 C++ Visual Studio 2010 中编码的。我认为可能有一些 NULL 指针或其他东西,但我不确定。任何帮助,将不胜感激。谢谢你。
解决方案
您OnCancel
正在取消分配内存,但没有确保它OnTimer
仍在访问该内存。
确保在删除变量之前调用KillTimer
(并确保已完成)。OnTimer
推荐阅读
- javascript - 如何将一组指令块划分为适合 JavaScript 中特定大小的连续数组的序列?
- sql-server - 将 DATETIME 列中的 NULL 值和空格替换为“不可用”的字符串?
- python - 如何在 pandas 中过滤(使用 loc)时应用数学函数
- php - PHP 数据库的第一行不会包含在网页上的表格中
- python - 如何删除除某些列中存在的某些值之外的所有行?
- mysql - 使一列中的 Date Mon 等于 yyyy-mm-dd hh:mm:ss
- bash - 如何将用于将 docker 注册表连接到 yaml 配置文件的 bash 命令转换?
- facebook - Facebook 令牌更新
- javascript - 如何将“导出默认值”中的数据传递到导出默认值 Vue.js 之外
- java - 用Java画多条线