Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Работать с указателем |
Автор: Rickert 20.7.2007, 06:05 | ||
Почему segmentation fault на последней строке? |
Автор: Rickert 20.7.2007, 06:54 | ||
Блин, ну конечно же:
Только надо будет перегрузить оператор =. |
Автор: Lazin 20.7.2007, 07:38 | ||
а разве terms.end() указывает не на следующий после последнего элемент.. Мне кажется лучше так:
|
Автор: Rickert 20.7.2007, 07:58 |
Твоя правда! |
Автор: Lazin 20.7.2007, 08:10 | ||||
потому-что vector.end() указывает на следующий после последнего элемент, в STL итератор end() используется обычно в качестве NULL-pointer-a. Если нужен последний элемент, то back() - возвращает ссылку на него, а итератор:
|
Автор: Rickert 20.7.2007, 08:13 | ||
Хорошо, тогда смотри так:
Почему в этом случае у меня всегда идёт указание на последний элемент? |
Автор: Rickert 20.7.2007, 08:36 |
:( |
Автор: Lazin 20.7.2007, 08:42 | ||
Потому что тело цикла исполняется только в том случае, если it != terms.end(), т.е. для it == terms.end() присваивание не выполняется. Подумайте, если вектор пуст, то присваивание не должно выполняться ни разу, так-как в этом случае terms.begin() == terms.end(). |
Автор: Lazin 20.7.2007, 09:18 | ||
Дело не в том - пуст или нет,
выдаст 9 а не 10. А зачем tff = &term.back(); в каждой итерации выполнять? Все итераторы - указатели на элементы вектора могут стать не действительными после добавления нового элемента в контейнер, может в этом дело? |
Автор: Rickert 23.7.2007, 06:52 |
Ладно, короче. Лишний раз убедился, что лучше за 2 минуты напишу свой класс списка, чем буду колупаться с этим stl ![]() Всё равно, спасибо! |
Автор: Daevaorn 23.7.2007, 08:57 | ||
удачи и успехов в этом не легком труде - написаниии велосипедов. Разобраться в конструкциях языка и спецификации стандартной библиотки, понятно дело, лень. Бывает. А Lazin всё по делу говорил. |