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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2013, 20:52   #1
Pinky882
Новичок
Джуниор
 
Регистрация: 19.11.2013
Сообщений: 2
По умолчанию A-star Проблема с итератором

Добрый вечер!
Уже несколько дней мучаюсь с этой ошибкой
"c++ vector iterator not dereferencable"
Что не так - не понимаю, может выскочить хоть на первой итерации, хоть на сотой в сотом вызове.
Вот код, где возникает исключение
Код:
while(!oldwave.empty()){
		wave.clear();
		++step;
		for(vector<pair<int,int> >::iterator i = oldwave.begin();i!=oldwave.end();i++){
			for(int d=0;d<4;++d){
				int nx=i->first+dx[d];
				int ny=i->second+dy[d];
				if(nx==-1 || ny==-1 
					|| nx==30 
					|| ny==20
					|| used.at(nx).at(ny)!=-1)continue;
				if(cells[nx][ny]==FREE && used[nx][ny]!=WALL ||(nx==x&&ny==y)){
					wave.push_back(make_pair(nx,ny));
					used.at(nx).at(ny)=step;
				}
				if(nx==x&&ny==y)
					goto done;
			}
		}
		oldwave=wave;
	}
done:
	wave.clear();
Pinky882 вне форума Ответить с цитированием
Старый 20.11.2013, 08:15   #2
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Подробно опиши переменные cells и used хотя бы. Или выложи весь код.
nikmoon вне форума Ответить с цитированием
Старый 20.11.2013, 19:21   #3
Pinky882
Новичок
Джуниор
 
Регистрация: 19.11.2013
Сообщений: 2
По умолчанию

http://pastebin.com/N0xWD47S
ошибка выскакивает в 24-25 строках
cells - содержит данные о типе клетки, FREE - свободная, значит можно пройти
used - содержит время, за которое мы дойдем до этой клетки
в метод передаются координаты клетки, в которую нужно придти.
Pinky882 вне форума Ответить с цитированием
Старый 21.11.2013, 02:48   #4
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Как вариант, попробуй разделить условие:
Код:
if( nx==-1 || ny==-1
 || nx==30
 || ny==20) continue;
if (used.at(nx).at(ny) != -1) continue;
Если не поможет, значит происходит выход за границы в векторах used или cells.
Проверь, что правильно заполняешь их. Я не могу знать чему у тебя равны world.getCells(), world.getWidth() и world.getHeight().

Последний раз редактировалось nikmoon; 21.11.2013 в 03:02.
nikmoon вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Project Star Net AlexFAst Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 28.09.2012 00:44
алгоритм A star(A*/ А звездочка) C++ Stochfard Помощь студентам 0 25.05.2012 17:47
Проблема с итератором(вроде) monolit111 Общие вопросы C/C++ 4 30.10.2011 11:39
Star Siege: The Last Earth's Hope Akkolt Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 25.08.2008 17:48