Участник
да вопрос не в сценарии, вопрос в том, что ты сделал проверку, которая криво работает(сначала прибавляет, а потом чекает - что очевидно не будет нормально работать) и которую ты (или кто-нибудь еще) потом может себе в другое место скопипастить(или похожую сделать) и потом получить пизды.В доте информация по количеству полей и по самим полям заполняется отдельной функцией, я не думаю, что хотя бы в теории, существует сценарий, при котором GetFields окажется nullptr, только если самому не ломать его специально.
Но проверку я все равно добавлю в следующем коммите - в плюсах быть параноиком полезно :)
бтв чтобы такой хуйни не было
C++:
for ( auto& keyBindInfo : mapKeyBinds )
{
if ( keyBindInfo.second.m_uKeyID != uKeyID || keyBindInfo.second.m_uMode == KeyBindMode::Always )
continue;
Пожалуйста, авторизуйтесь для просмотра ссылки.
C++:
for ( auto& [_, keybind] : mapKeyBinds )
{
if ( keybind.m_uKeyID != uKeyID || keybind.m_uMode == KeyBindMode::Always )
continue;
устроил твоему читу сеанс интенсивной терапии(кучу раз вход и асинхронный выход)
и как ожидалось настал момент когда звезды сошлись и планировщик ресурсов винды дал треду деинита чита(который убивает имгуи и прочую хуиту) и треду рендера доты выполняться одновременно(на десятой итерации это случилось)
был вызван хук презента и в нем рендер имгуи и параллельно имгуи был убит
вот еще снова мертвый имгуи в презенте(на этот раз на 4 итерации)
ну я думаю ты понял суть. понятно что в реальных условиях вероятность гораздо меньше но тем не менее существует.
для теста попробуй поюзай вот этот код(крашнет если звезды сойдутся. если не крашит значит ты везучий пробуй еще хули)) ):
for i = 0 to 100
{
init()//ну все твои аттачи хуячи и тд
std::jthread{deinit};//асинхронный выход. токо без freelibrary. jthread ждёт смерти треда в деструкторе
}
фиксится двухэтапным деинитом(деинит говорит презенту что он щас будет деинититься и ждёт ответа, презент вызывает оригинальный презент и сохраняет возврат и ожидает конца деинита, деинит начинает деинититься и по окончанию говорит презенту что все нормально и презент возвращает результат оригинального презента)(тестил на 1000 итераций, не крашит).