Push_back для вектора указателей структуры выдает ошибку сегментации внутри оператора if в цикле for, но не в отладке ⇐ C++
Push_back для вектора указателей структуры выдает ошибку сегментации внутри оператора if в цикле for, но не в отладке
Я писал небольшую реализацию шахмат для тренировки с entt и ncurses и столкнулся с проблемой, о которой даже не знаю, что делать.
По сути, при реализации ходов я просматриваю выбранные части, чтобы определить набор ходов, который они могут использовать. Идея заключалась в том, чтобы сохранить ходы в векторе и показать его. Однако при попытке push_back в вектор выдается ошибка сегмента.
// получаем ходы auto selected_view = reg.view(); std::vector перемещается; for (auto [ent, Piece, P, Pawn]: selected_view.each()) { если(!pawn.has_moved) { moving.push_back(новая позиция{1, 0}); // это сбой } } Это исчезнет, если я удалю оператор if
// получаем ходы auto selected_view = reg.view(); std::vector перемещается; for (auto [ent, Piece, P, Pawn]: selected_view.each()) { moving.push_back(новая позиция{1, 0}); // это отлично } Я попробовал построить его в режиме отладки, чтобы пройти через него, но при этом, конечно, все сработало так, как я и ожидал. Я предполагаю, что это означает, что я делаю что-то, вызывающее неопределенное поведение.
Однако я не могу понять, что является причиной этого, я бы предположил, что он хранится в куче, и вектор следит за ним, но явно нет. То же самое происходит и с вектором структур.
Если кто-нибудь сможет мне помочь, я буду очень признателен.
Используется система Ubuntu 22.04, для компиляции используется g++.
Я писал небольшую реализацию шахмат для тренировки с entt и ncurses и столкнулся с проблемой, о которой даже не знаю, что делать.
По сути, при реализации ходов я просматриваю выбранные части, чтобы определить набор ходов, который они могут использовать. Идея заключалась в том, чтобы сохранить ходы в векторе и показать его. Однако при попытке push_back в вектор выдается ошибка сегмента.
// получаем ходы auto selected_view = reg.view(); std::vector перемещается; for (auto [ent, Piece, P, Pawn]: selected_view.each()) { если(!pawn.has_moved) { moving.push_back(новая позиция{1, 0}); // это сбой } } Это исчезнет, если я удалю оператор if
// получаем ходы auto selected_view = reg.view(); std::vector перемещается; for (auto [ent, Piece, P, Pawn]: selected_view.each()) { moving.push_back(новая позиция{1, 0}); // это отлично } Я попробовал построить его в режиме отладки, чтобы пройти через него, но при этом, конечно, все сработало так, как я и ожидал. Я предполагаю, что это означает, что я делаю что-то, вызывающее неопределенное поведение.
Однако я не могу понять, что является причиной этого, я бы предположил, что он хранится в куче, и вектор следит за ним, но явно нет. То же самое происходит и с вектором структур.
Если кто-нибудь сможет мне помочь, я буду очень признателен.
Используется система Ubuntu 22.04, для компиляции используется g++.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение