我有一个试图填充一对的应用程序。无处不在,应用程序崩溃了。
崩溃转储的Windbg分析建议:
PRIMARY_PROBLEM_CLASS:INVALID_POINTER_READ
DEFAULT_BUCKET_ID:INVALID_POINTER_READ
STACK_TEXT:
0389f1dc EPFilter32!std::vector<std::pair<unsigned int,unsigned int>,std::allocator<std::pair<unsigned int,unsigned int> > >::size+0xc
INVALID_POINTER_READ_c0000005_Test.DLL!
std::vector_std::pair_unsigned_int, unsigned_int_,std::allocator_std::pair_unsigned_int,unsigned_int_____::size
以下是失败时代码中的代码捕捉:
for (unsigned i1 = 0; i1 < size1; ++i1)
{
for (unsigned i2 = 0; i2 < size2; ++i2)
{
const branch_info& b1 = en1.m_branches[i1]; //Exception here :crash
const branch_info& b2 = en2.m_branches[i2];
}
}
其中branch_info
是std::pair<unsigned int,unsigned int>
并且en1.m_branches[i1]
提取了一对值。
答案 0 :(得分:4)
i1
索引可能超出en1.m_branches
向量的范围。
为什么不在循环条件中使用en1.m_branches.size()
?这将确保您在正确的边界内使用索引。