Народ! Получаю данный эксепшен. Из того, что нагуглил проблема связана с HEAP CORRUPTION.
Обычно при HEAP CORRUPTION выдается минимальная диагностика, блок рядом с которым произошла ошибка и тп. В данном случае ничего не выдается. Что значит эта ошибка? Error lookup не знает такой ошибки. В гугле тоже не нашел
Добавление _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF
| _CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_CHECK_CRT_DF );
Скрывает проблему
Проблема кроссплатформенная, на линуксе она тоже воспроизводится как Segmentation Fault, но пока не пробовал дебажить под линуксом (мне под виндой удобнее). Я понимаю, что мы где-то лазим по памяти, но удивляет отсутсвие диагностики. Развалы происходят в 100% запусков, в разных тредах, но всего пяток коллстеков с развалом. любое изменение кода в функциях из колстеков приводит к изменению комбинации коллстеков развала (что в общем понятно, что по памяти ходит другой тред).
Развал происходит при вызове:
_CrtMemBlockHeader* const header{static_cast<_CrtMemBlockHeader*>(HeapAlloc(__acrt_heap, 0, block_size))};
Самое удивительное, но развал происходит когда block_size = 56. других значений не видел, непонятно почему ???
Те задача стоит в том чтобы понять где поврежден хип?