В моем случае, с похожими симптомами, проблема заключалась в несоответствии выравнивания структуры (опция / Zp)
Я определил для своего кода другое выравнивание структуры, чем внешние библиотеки (wxWidgets).
Однако wxWidgets был собран с make-файлом, поэтому он был скомпилирован с использованием defaut / Zp.
И wxWidget статически связан.
Вы можете сделать это, но если вы попытаетесь удалить объект класса wxWidgets из вашего кода , компилятор запутается в точном размере членов структуры.
И при запуске вы получаете это сообщение:
HEAP[Code.exe]: HEAP: Free Heap block 211a10 modified at 211af8 after it was freed
Windows has triggered a breakpoint in Code.exe.
Решение:
Обязательно используйте одинаковое «выравнивание элементов Struct» во всем коде и библиотеках.
Лучшим правилом является определение / ZP для использования значения по умолчанию.
В Visual Studio в разделе Свойства C / C ++ Генерация кода
MSDN cite: " Вы не должны использовать эту опцию, если у вас нет особых требований к выравниванию. "
Смотрите здесь
Совет: используйте # pragma pack , если вам нужно контролировать выравнивание в некоторых структурах
Смотрите там
* +1039 * Пример:
#pragma pack(1) // - 1 byte alignment
typedef union
{
u64 i;
struct{ // CUSTOMS.s is used by Folders
u32 uidx; // Id, as registered
byte isoS, isoT; // isoS/isoT combination.
byte udd0, udd1; // custom values (TBD)
}s;
}CUSTOMS;
struct Header // exactly 128 bits
{
u32 version;
u32 stamp; // creation time
CUSTOMS customs; // properties
}
#pragma pack() // this pragma restores the **default** alignment
*
Надеюсь, это объяснение поможет, потому что на самом деле это не ошибка в коде, а серьезная ошибка конфигурации: ее трудно обнаружить, поскольку она находится в тонких настройках компилятора. Спасибо за все,