Нарушение прав доступа в std :: pair - PullRequest
0 голосов
/ 20 мая 2010

У меня есть приложение, которое пытается заполнить пару. Из ниоткуда приложение вылетает.

Анализ 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] извлекает мне пару значений.

1 Ответ

4 голосов
/ 20 мая 2010

Вероятно, индекс i1 выходит за пределы вектора en1.m_branches.

Почему бы вам не использовать en1.m_branches.size() в вашем цикле? Это позволит вам использовать индексы внутри правильных границ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...