У меня странная проблема, когда я страдаю от сбоев при удалении объектов в моем коде. Объекты действительны, нет утечек памяти, которые могли бы перезаписать их, и это происходит только в режиме отладки. Один и тот же код, скомпилированный в Linux, отлично работает как в отладочной, так и в релизной сборке. Так что я предполагаю, что это какая-то странная проблема с отладочными CRT в Visual Studio.
Моя программа устроена следующим образом:
Две статические библиотеки скомпилированы в режиме "Многопоточная (отладочная) DLL" и связаны с: Совместно используемой библиотекой (DLL), которая скомпилирована в режиме "Многопоточная (отладочная)". Исходя из логики, я бы сказал, что должно быть наоборот, но тогда я получаю ОГРОМНОЕ количество неразрешенных символов.
Наконец, есть исполняемый файл, скомпилированный в режиме «Многопоточная (отладочная) DLL», который вызывает упомянутую выше DLL. Здесь не имеет значения, когда я переключаюсь на «Многопоточность (отладка)».
Краш при удалении объекта происходит в dbgheap.c / _heap_alloc_dbg_impl() -> mlock.c / _unlock() - функция
Итак: в чем может быть проблема? Действительно ли это какая-то CRT-несовместимость в режиме отладки или в чем еще может быть причина? Я совершенно уверен, что это не типичная утечка памяти, так как она работает гладко с Linux и в релизной сборке.