循环体里有时能运行有时就出错,循环次数多的话就容易出错
代码较长 我把关键的代码贴出来 大家帮忙看下
a_Info m_temp;//结构体
a_fps m_temp_1;
UINT* temp_Fp=NULL;
vector<UINT> m_a_fps;
for (i=0; i<m_lib.size(); i++)
{
m_temp.a_Length=(m_lib[i]->m_fingerprint).GetFingerprintLength();
temp_Fp=(m_lib[i]->m_fingerprint).GetFingerprint();
m_a_info.push_back(m_temp);
for(j = 0; j < m_a_info[i].a_Length; j++)
{
m_temp_1.m_index=j+1;
m_temp_1.m_fps=temp_Fp[j];//出错的时候总是是在这里
m_a_fps.push_back(m_temp_1);
}
}
错误是0x00BD1EDC 处有未经处理的异常(在 AudioFeaFiling.exe 中): 0xC0000005: 读取位置 0x30FCB000 时发生访问冲突。
请大家帮忙解释下并提出解决办法
[解决办法]
你怎么保证“temp_Fp[j];”下标为j的元素存在呢?
[解决办法]
应该是越界了 单步调试下 很容易发现
[解决办法]
2楼和3楼所述的情况很有可能
可以设置条件把关键的变量值打印出来看看
另:vc里有针对循环内调试的方法,breakpoint->condition 或 hit count等
祝你好运!
[解决办法]
//在这句前打印m_a_info[i].a_Length和temp_Fp的大小到文件,崩溃的时候看看俩大小是不是不一样,还是越界的可能大。