Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
1

SFML баг в программе

24.11.2015, 19:33. Показов 1877. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите с проблемкой.
Ниже исходники прикрепил, проект VS.
Проблема в чем: поставьте много много башень и посмотрите, как зависают пули, которые не долетают до цели, которую уже уничтожили.
Я делаю так:
для каждой пули делаю ссылку на обьект типа ВРАГ, и каждый раз когда рисую, проверяю, жив ли он. Если уже убит, а пуля не долетела, то удалить пулю из листа и не отображать.
Но они почему-то отображаются, то есть условие (it->chosen_enemy) всегда true.
Почему если я удаляю врагов из листа типа враги, ссылки на удаленные обьекты не становятся NULL ???
Вложения
Тип файла: zip Defender.zip (6.70 Мб, 4 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2015, 19:33
Ответы с готовыми решениями:

Sfml. Не могу найти ошибку в программе
Я написала программу, вот ее условие:Вдоль нижнего края графического окна строится от 5 до 15...

Баг в программе. Без цикла работает нормально. С циклом выдает баг
Здравствуйте. Пишу программу. И как не пытался ее переписать, как дохожу до момента включения в код...

Баг в программе
Всем привет! Столкнулся с багом: когда ветвь программы доходит до главного меню ( т.е. просят...

Баг в программе
Доброго времени суток,форумчане. Задача такова: Массивв символов,содержащий 16-ое представление...

8
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
24.11.2015, 19:43  [ТС] 2
Исправил проверкой при удалении врага: в цикле все пули, которые указывают на него, автоматически получают nullptr. Проблемка еще есть одна маленькая:
Иногда пули если поставить много башень стреляют куда то в небо. Кому не лень, пожалуйста попробуйте.
И да, обновленный main.cpp
Вложения
Тип файла: zip main.zip (4.0 Кб, 2 просмотров)
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
24.11.2015, 20:01  [ТС] 3
Вот поймал кадр как летит вверх влево. Почему такое может быть?
И вообще только что вылетела программа после того кк другая пуля тоже ушла в неизвестном направлении... Типа за пределы памяти обращаюсь..
Откуда эти ошибки???
Миниатюры
SFML баг в программе  
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
24.11.2015, 20:10  [ТС] 4
Вот такое вылетает после где то минуты игры. Пишет проблема в строчке где я рисую пули
Миниатюры
SFML баг в программе  
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
24.11.2015, 21:40 5
Лучший ответ Сообщение было отмечено maxm как решение

Решение

Цитата Сообщение от maxm Посмотреть сообщение
Вот такое вылетает после где то минуты игры.
у меня сразу segfault при установке башни.

Добавлено через 10 минут
такс, это исправил, добавил chosen_enemy(0) в список инициализации конструктора класса Tower.

Добавлено через 4 минуты
Дальнейший просмотр кода выявил UB:
В цикле при проходе списка enemies, есть такой фрагмент:
C++
1
2
3
4
                for (list<Bullet>::iterator it_b = bullets.begin(); it_b != bullets.end(); it_b++)
                    if (it_b->chosen_enemy == &(*it)) it_b->chosen_enemy = nullptr;
                enemies.erase(it);//Элемент, на который был "нацелен" итератор, удален, куда теперь "нацелен" итератор it?
                break;
Исправил на:
C++
1
2
3
4
5
                for (list<Bullet>::iterator it_b = bullets.begin(); it_b != bullets.end(); it_b++)
                    if (it_b->chosen_enemy == &(*it)) it_b->chosen_enemy = nullptr;
                it=enemies.erase(it); //it теперу будет "нацелен" на элемент, следующий за удаленным. Чтобы его обработать
                --it ;//Идем к предыдущему элементу, тогда
                break;//после итеррации итератор опять будет на этот элемент "нацелен"
После этой правки пули стали летать как надо и вылеты прекратились. Потестите, может еще косяки есть.
А так респект за старания, обычно здесь выкладывают задания "напишите игру", а не "помогите найти ошибку в моей игре"

Добавлено через 2 минуты
Вот почему то при запуске этой игры у меня дросселя начинают свистеть в системнике

Добавлено через 39 минут
Ой, исправил еще пару ошибок такого же плана, появились баги
1
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
24.11.2015, 21:49  [ТС] 6
Цитата Сообщение от Croessmah Посмотреть сообщение
Ой, исправил еще пару ошибок такого же плана, появились баги
Вот же блин, есть правило: работает - не трогай !!!
А так то спасибо
Не знал от такой конструкции

Добавлено через 3 минуты
А что дает в этом случае такая правка? Почему без нее не работает то?
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
24.11.2015, 22:14  [ТС] 7
А, ну и да.. вот вам готовая, поиграть на досуге )))
Сяду за тетрис пока
Вложения
Тип файла: zip Defender.zip (6.78 Мб, 1 просмотров)
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
24.11.2015, 22:20 8
Проблема в том, что весь код в куче, мест, где может быть зарыта ошибка - тоже.
Сейчас имеем одну большую портянку, плюс ко всему форматирование хромает сильно и имена переменных (особенно итераторов, не разберешь где какой it).
Разбейте код на функции, выполняющие свои задачи, тогда можно более эффективно работать с кодом, да и код сам станет меньше и нагляднее
0
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
25.11.2015, 20:40  [ТС] 9
Да а как разбить тут?
Так ведь прийдеться для функций передавать кучу параметров, например делаю то же перемещение башни по карте - там используются все переменные практически, нужно передать параметров 10 штук.

Или можно обьявить все глобальными вне main-функц. и после их обьявления обьявлять функции ?
0
25.11.2015, 20:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2015, 20:40
Помогаю со студенческими работами здесь

Баг в программе
Задание. Код. При тестировании программы 2 значения не проходят. В чем баг - не знаю. Помогайте с:

Баг в программе
Столкнулся с проблемой когда ввожу данные, нажимаю ОК! первый раз программа всё делает правильно)...

Исправить баг в программе
Здравствуйте уважаемые форумчане. На скорую руку набросал программу, в которой показываются...

Баг в готовой программе
вот и допилил я свою программу, и она даже иногда работает, но вот такая проблема, иногда она при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru