On Tue, 23 Apr 2002 08:40:43 +0400 Andrew Saunders <[EMAIL PROTECTED]> wrote:
AS> Столкнулся вот с какой ерундой: по логике (моей) этот кусок кода AS> работать должен. Всё компилируется, однако, при запуске программы AS> случается segfault. AS> void f() AS> { AS> vector<string> paths; AS> paths.push_back("1"); AS> cout << "loop..." << endl; AS> vector<string>::iterator p = paths.begin(); AS> while (p != paths.end()) { AS> cout << "\t" << *p << endl; AS> paths.push_back(p, "2"); AS> ^^^^^^^^^^^^^^^^^^^^^^^^ AS> this is the place of segfault В этой строчке ты вызываешь функцию, которая изменяет состояние контейнера paths (не const функцию). При этом могут поменяться значения paths.begin () и paths.end () . Получается, в условии while ты сравниваешь p неизвестно с чем. Один из способов решения проблемы - перевычислять p и paths.end () при каждом добавлении. Другой - доступаться к элементам вектора через [индекс]. Тут еще Влад Харчев советовал std::list использовать. Я не уверен, что неизменность begin () и end () у списка гарантируется при использовании неконстантных функций. Или все таки гарантируется, Влад? AS> ++p; AS> } AS> cout << "end..." << endl; AS> } -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]