HeapAlloc: Critical error detected c0000374
От: gwg-605 Россия  
Дата: 08.03.21 21:05
Оценка:
Народ! Получаю данный эксепшен. Из того, что нагуглил проблема связана с 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. других значений не видел, непонятно почему ???

Те задача стоит в том чтобы понять где поврежден хип?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.