Здравствуйте. Сегодня я пробовал сдавать задачи без своей 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 мне лучше не писать, но все-таки, может кто-то объяснит в чем дело, или все же на этот раз виновен компилятор?) Самому не очень верится, т.к. впервые вижу чтобы не работало на обоих.
Typical C++
<holywar>
You mean — "Mysterious high-level programming language which prevent you from losing the understanding of actual operations" ? :)</holywar>
I'm on a quest to insert "Typical %something%" comments in every place that seems fit.
Typical beatoriche