Konstantin.Zakharov's blog

By Konstantin.Zakharov, 5 years ago, In Russian,

Здравствуйте. Сегодня я пробовал сдавать задачи без своей visual studio 2012, используя ideone.com. У меня не заработало Binary Search Tree, написанное на векторе. Точнее, оно выдавало неправильные ответы. После некоторого упрощения, тот же код стал давать ошибку исполнения.

После нескольких тщетных попыток понять в чем дело я скопировал код в студию, поставил несколько точек останова, начал отладку. Все верно. Убрал точки, запустил — а оно работает.

Поменял конфигурацию Debug на Release, запустил — ошибка исполнения.

Попробовал скомпилировать на MinGW 4.8.1 (tdm-2) — ошибка исполнения, независимо от наличия флага -O.

Cделал пример как можно меньше, но даже после этого результат прежний — signal 11 (SIGSEGV), обращение к не принадлежащей области памяти.

#include <vector>

namespace Ex {

  std::vector<int> next; // next[i] = index of next element. -1 if it's not exist

  int rec(int ind = 0) {
    if( ind == -1 ) {
      next.push_back(-1);
      return next.size() - 1;
    }
    next[ind] = rec(next[ind]);    
    return ind;
  }

}

int main() {

  Ex::next.push_back(-1);

  for(int i = 0; i < 20; i++)
    Ex::rec();

  // expected Ex::next states
  // -1
  // 1 -1
  // 1 2 -1
  // 1 2 3 -1
  // ...
  // 1 2 3 ... 20 -1

  return 0;
}

Я уже понял, что на ideone мне лучше не писать, но все-таки, может кто-то объяснит в чем дело, или все же на этот раз виновен компилятор?) Самому не очень верится, т.к. впервые вижу чтобы не работало на обоих.

 
 
 
 
  • Vote: I like it
  • +3
  • Vote: I do not like it

»
5 years ago, # |
  Vote: I like it -27 Vote: I do not like it

Typical C++

  • »
    »
    5 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    <holywar> You mean — "Mysterious high-level programming language which prevent you from losing the understanding of actual operations" ? :) </holywar>