std :: pair中的访问冲突

时间:2010-05-20 06:24:58

标签: c++ stl

我有一个试图填充一对的应用程序。无处不在,应用程序崩溃了。

崩溃转储的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_infostd::pair<unsigned int,unsigned int> 并且en1.m_branches[i1]提取了一对值。

1 个答案:

答案 0 :(得分:4)

i1索引可能超出en1.m_branches向量的范围。

为什么不在循环条件中使用en1.m_branches.size()?这将确保您在正确的边界内使用索引。