У меня есть класс, находящийся внутри dll, и exe, использующий эту dll. Exe просто создает класс в dll и вызывает его методы. Все отлично работает при компиляции в режиме релиза. Но если я скомпилирую все (включая библиотеку OpenCV, которую использует мой класс) в режиме отладки с флагом MDd, тогда я получу:
Debug Assertion Failed! _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Все используемые двоичные файлы используют одну и ту же версию библиотек времени выполнения, и все компилируется на одном компьютере с VS 2008. Насколько я понимаю (основываясь на моих отладках), проблема заключается в следующем:
Я создаю экземпляр моего класса с помощью оператора «new» в exe (под main), а затем, как только конструктор моего класса делает что-то, требующее выделения памяти, место в памяти самого класса перезаписывается, как если бы и dll, и exe используют одно и то же пространство памяти, но разные «следующие доступные позиции для выделения» смещений. Поэтому dll не видит, что уже было выполнено выделение внутри exe, поэтому перезаписывает область памяти, в которой находится мой класс. Очевидно, это вызывает проблемы с памятью.
Есть идеи, почему это может случиться? Я изо всех сил старался объяснить ситуацию, но, конечно, могу предоставить больше информации, если потребуется.
Заранее спасибо.