|
1 / 1 / 0
Регистрация: 31.07.2022
Сообщений: 17
|
||||||||||||||||
Игра зависает через неопределённое время жрёт процессор и выключается31.07.2022, 15:47. Показов 2033. Ответов 12
Здравствуйте, это моё первое приложение на WINAPI. Под конец столкнулся с проблемой зависания. Игра "Бомбер" запускается и работает отлично, но через несколько игр неожиданно зависает (причину не определил). Отладчик WS2019 не останавливается ни на каких исключениях. Посмотрел через Deleaker, утечек не наблюдаю.
Так как код довольно большой опишу его словами: есть массив(map) который хранит ячейки(части) карты - class Cell. У Cell есть указатель на class Item, который является базовым для большинства элементов игры(Wall, Barrier, Void...).
Чтобы изменить содержимое карты используется метод Cell::set(Item*, char) :
Прорисовка и движения происходят по таймеру (25 мс). Для отрисовки используется двойная буферизация. Думаю зависание как-то связано с delete в коде снизу, так как если их закоментировать, то зависания не наблюдал, но появляются утечки.
Приведу ссылку для удобства на GitHab с полным кодом. Если нужно, то могу отправить код и сюда, это мой первый пост и я не знаю можно ли приводить ссылки когда код большой (иначе получится очень много текста). GitHab: https://github.com/2romanio005/Domber
0
|
||||||||||||||||
| 31.07.2022, 15:47 | |
|
Ответы с готовыми решениями:
12
Warcraft 3 зависает через неопределённое игровое время Комп зависает и через время выключается |
|
Заблокирован
|
|
| 31.07.2022, 18:09 | |
|
2romanio005, в архиве сюда?
1
|
|
|
1 / 1 / 0
Регистрация: 31.07.2022
Сообщений: 17
|
|
| 31.07.2022, 18:17 [ТС] | |
|
Архив с кодом:
0
|
|
|
2738 / 1664 / 267
Регистрация: 19.02.2010
Сообщений: 4,396
|
||
| 31.07.2022, 19:57 | ||
|
Делай вне класса enum с нужным числом состояний - и затем в классе поле этого перечислимого типа (вместо char). Состояния енума будут в затем в коде возникать в качестве именованных констант - поэтому все синтаксические очепятки будут сразу же ловиться компилятором.
1
|
||
|
1 / 1 / 0
Регистрация: 31.07.2022
Сообщений: 17
|
|
| 31.07.2022, 20:11 [ТС] | |
|
VTsaregorodtsev, спасибо! Согласен с вами. А можно как-нибудь обойтись вообще без этой переменной(она используется только для понимания какой именно класс лежит в указателе)?
0
|
|
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|||||||||
| 31.07.2022, 20:35 | |||||||||
|
2romanio005, попробуй переписать игру, заменив сырые указатели на умные (std::unique_ptr / std::shared_ptr)
Добавлено через 1 минуту Добавлено через 1 минуту enum classДобавлено через 1 минуту 2romanio005, русские комментарии в гитхабе побились Добавлено через 12 минут 2romanio005,
1
|
|||||||||
|
1 / 1 / 0
Регистрация: 31.07.2022
Сообщений: 17
|
||||
| 31.07.2022, 21:02 [ТС] | ||||
|
nick]VTsaregorodtsev[/nick],
Я могу это сделать, но: 1) это не решит/плохо решит подобные проблемы в будущем 2) я не горю желанием уходить в абстракцию, не поняв базы
0
|
||||
|
2735 / 890 / 331
Регистрация: 10.02.2018
Сообщений: 2,112
|
|||||||||||||||||||||
| 31.07.2022, 21:35 | |||||||||||||||||||||
Сообщение было отмечено 2romanio005 как решение
Решение
У меня зависло после одновременной установки нескольких бомб и взрыва одной из них. Хотя иногда подобные действия не приводят к зависаниям.
1
|
|||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 31.07.2022
Сообщений: 17
|
|
| 31.07.2022, 22:01 [ТС] | |
|
Ygg, Спасибо! Скорее всего из ActiveBomb удаляется не та бомба (хотя странно), завтра буду тестить!
0
|
|
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
||||||||
| 31.07.2022, 22:44 | ||||||||
|
Но, впрочем, ошибка может быть и не из-за лапши с указателями ![]() в случае лямбды нужный тип так написать и вовсе невозможно, его только компилятор знает. А пишешь ты указатель на функцию, к которому приведётся сия кложура, поскольку умеет так делать. А если захват будет, как выведешь?
0
|
||||||||
|
Заблокирован
|
|
| 01.08.2022, 07:34 | |
|
2romanio005, если закомментить
delete[] ... и зависание исчезнет, видимо выходите за границы массива при его использовании
0
|
|
|
1 / 1 / 0
Регистрация: 31.07.2022
Сообщений: 17
|
|
| 01.08.2022, 14:02 [ТС] | |
|
Ygg, Всё оказалось довольно просто, как обычно. В сете ActiveBomb хранились все активные бомбы, чтобы отслеживать какая взорвётся первой. И я не очищал этот контейнер когда начиналась новая игра, в нём оставались указатели на удалённые Bomb с предыдущей игры. После этого всё зависало. Если же я убирал delete в Cell::set() то ActiveBomb хранил в себе указатели на не удалённые бомбы, что не вызывало зависаний, но вызывало неправильную работу кода(различные баги) ну и появлялись утечки.
Всем большое спасибо, и хорошего настроения!
1
|
|
|
фрилансер
6465 / 5678 / 1131
Регистрация: 11.10.2019
Сообщений: 15,118
|
|
| 01.08.2022, 14:12 | |
|
0
|
|
| 01.08.2022, 14:12 | |
|
Помогаю со студенческими работами здесь
13
Замирает тачпад через неопределенное время (Linux Mint) Через неопределенное время в браузере Chrome открывается новая вкладка с рекламой
Во время игры монитор гаснет на несколько секунд, после включения игра зависает и закрывается Через некоторое время выключается ПК Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|