Блог пользователя Hasan0540

Автор Hasan0540, 9 лет назад, По-английски

Can anyone explain why does the first code get Runtime Error?

RTE: http://ideone.com/7UNoVJ

OK: http://ideone.com/fOWbj3

Thanks!

  • Проголосовать: нравится
  • -1
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

I tried debugging it and it seems to have something to do with the order of the equalization, and the vector usage. You cannot use [] operators when the size of vector is 0. So when we use in the first call reg[] we are trying to access an vector of size 0, which causes an error.

The problem ceases when we resize the vector to size 1. Here.

Or in your second example when we resize the vector using the function, before trying to access the vector itself.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится

    Thank you for your reply!

    But in this code I'm not using [] operator with an empty vector, and still have a runtime error?

    • »
      »
      »
      9 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      The thing is: you use invalid memory when assigning to reg[x], because the function, which result is assigned to reg[x], does change the vector (and, possibly, it's allocation). See this comment for detailed explanation.

»
9 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

I suspect that function getRegIndex might cause vector relocation in memory, so reg[getRegIndex(1,reg)] won't be part of your vector anymore.

  • »
    »
    9 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится

    I think you are right, here I increase the capacity before calling the function and there is no problem.

    Thank you!