У вас нет , чтобы использовать одни и те же среды выполнения для модулей выпуска и отладки (но это помогает), если вы следуете очень специфическим правилам: никогда не смешивайте и не сопоставляйте доступ к памяти, выделенной с помощью каждого во время выполнения.
Проще говоря, если в dll есть подпрограмма, которая выделяет некоторую память и возвращает ее вызывающей стороне, вызывающая сторона никогда не должна освобождать ее - вы должны создать функцию в исходной dll, которая освобождает память. Таким образом, вы защищены от несоответствий во время выполнения.
Если вы считаете, что библиотеки Windows построены только на выпуск (если у вас нет отладочной версии Windows), но вы используете их из своих приложений отладки, вы увидите, как это важно.
Ваша проблема сейчас в том, что вы используете статическую библиотеку, границы dll больше нет, а вызовы в библиотеке компилируются с использованием статической версии среды выполнения C. Если ваш exe использует динамическую dll-версию среды выполнения, вы обнаружите, что компоновщик использует ее вместо той, что использовала ваша статическая библиотека ... и вы получите сбои.
Итак, вы можете перестроить свою библиотеку как dll; или вы можете убедиться, что они оба используют одну и ту же библиотеку CRT; или вы можете убедиться, что они оба используют один и тот же тип CRT - то есть версию dll или статическую версию, сохраняя при этом различия отладки / выпуска.
По крайней мере, я думаю, что это ваша проблема - каковы настройки «Генерация кода, библиотека времени выполнения»?