Архитектура навигации не использует одно действие

Все уже указали на большую вещь, которая является потенциальным неопределенным поведением из переполнения стека, но я должен упомянуть, что в среде Windows есть отличный механизм, чтобы поймать это, используя структурированные исключения (SEH) и защитные страницы. Поскольку стек растет только по мере необходимости, эти страницы защиты находятся в областях, которые нераспределены. Если вы выделяете в них (путем переполнения стека), генерируется исключение.

Вы можете поймать это исключение SEH и вызвать _resetstkoflw, чтобы сбросить стек и продолжить свой веселый путь. Это не идеально, но это еще один механизм, по крайней мере, знать, что что-то пошло не так, когда материал попадает в вентилятор. * nix может иметь что-то подобное, о котором я не знаю.

Я рекомендую ограничить максимальный размер выделения, обернув alloca и отслеживая его внутренне. Если бы вы были очень хардкорны, вы могли бы бросить часовые прицелы в верхней части своей функции, чтобы отслеживать любые распределения alloca в области функций и здравомыслия, проверяя это на максимальную сумму, допустимую для вашего проекта.

Кроме того, в дополнение к недопущению утечек памяти alloca не вызывает фрагментации памяти, что очень важно. Я не думаю, что alloca - это плохая практика, если вы используете ее разумно, что в принципе верно для всего. : -)

0
задан Ahmed S. Durrani 16 January 2019 в 01:51
поделиться

1 ответ

Я решил проблему создания нескольких действий. Для других людей, которые сталкиваются с той же проблемой. Убедитесь, что приложение не в фоновом режиме, если вы пытаетесь перейти к фрагменту с помощью архитектуры навигации.

Если приложение остается активным, это не приведет к созданию нового экземпляра действия, и приложение будет работать так, как ожидается.

0
ответ дан Ahmed S. Durrani 16 January 2019 в 01:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: