Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2009, 19:36   #1
Homer_J_Simpson
Пользователь
 
Аватар для Homer_J_Simpson
 
Регистрация: 15.11.2009
Сообщений: 16
По умолчанию Проблема с классом list

Не понимаю, может быть в борланде 10 левые библиотеки, может я чего-то не понял. В общем предположим лист содержит один элемент. В листе ссылка этого элемента на следующий должна быть равна null, но я проверил по дебагу, ссылка не нулевая, а объект следующий нулевой. Он же, в свою очередь ссылается на первый элемент. Таким образом используя итерацию я получаю бесконечный цикл и вся программа виснет.
Может это быть связано с тем, что я храню в списке указатели на объекты?

Последний раз редактировалось Homer_J_Simpson; 26.11.2009 в 19:39.
Homer_J_Simpson вне форума Ответить с цитированием
Старый 27.11.2009, 08:33   #2
d9m0n
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 29
По умолчанию

После последнего элемента списка располагается еще один элемент, возвращаемый list::end().
И это не особенность Borland, а особенность STL.

Для того, чтобы не было зацикливаний нужно делать выход, если итератор становится равен list::end()
d9m0n вне форума Ответить с цитированием
Старый 28.11.2009, 20:57   #3
Homer_J_Simpson
Пользователь
 
Аватар для Homer_J_Simpson
 
Регистрация: 15.11.2009
Сообщений: 16
По умолчанию

ну этот последний элемент явно не должен указывать на первый?
был в общем такой код
Код:
list<TKeyEdit*> fieldsToClear;
list<TKeyEdit*>::iterator it;
for (it = fieldsToClear.begin(); it !=fieldsToClear.end(); it++) {
     //some code
}
TKeyEdit - мой класс, унаследованный от TEdit.
Мне больше интересно, работал кто-нибудь в среде Embarcadero RAD Studio 2010 со списками, т. к. у полчился просто напросто бесконечный итератор. Выходить из проблемы пришлось использованием класса map.
Homer_J_Simpson вне форума Ответить с цитированием
Старый 28.11.2009, 21:34   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Проблема точно в list? Проверил на Embarcadero 2010 такой код:
Код:
#include <iostream>
#include <list>

int main()
{
	std::list<int> l;
	l.push_back(10);
	l.push_back(20);
	l.push_back(30);

	for(std::list<int>::iterator it = l.begin(); it != l.end(); ++it) {
		std::cout << *it << ' ';
	}

	std::system("Pause");

	return 0;
}
Нормально работает
netrino вне форума Ответить с цитированием
Старый 28.11.2009, 22:03   #5
Homer_J_Simpson
Пользователь
 
Аватар для Homer_J_Simpson
 
Регистрация: 15.11.2009
Сообщений: 16
По умолчанию

В чём и дело прогонял дебагом, был просто бесконечный цикл, жаль удалил оригинал, хотя прокурил его вдоль и поперёк. Как нибудь сам ещё попробую, единственное на что у меня подозрение, так только на то, что хранил указатели в листе, может в этом косяк какой.
Homer_J_Simpson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с классом и объектами (Что в программе нужно изменить?) wepoTWR Помощь студентам 0 17.11.2009 19:26
Программа с классом и объектами. wepoTWR Помощь студентам 3 10.11.2009 22:34
Работа с классом TStringStream в Borland C++ profi Общие вопросы C/C++ 2 26.07.2009 20:14
C++ работа с классом VadEr Помощь студентам 2 17.05.2009 12:33
кто нибудь знаком с классом? BESS Microsoft Office Word 1 10.08.2008 12:15