Я использую MSVS 9 (VS 2008). Мое приложение, а также общая библиотека (dll) (я использую для связи с моим приложением) также имеют среду C++. Теперь соблюдайте следующие случаи:Режим деблокирования Vs Режим DEbug в MS Visual Studio Windows
когда разделяемая библиотека/DLL построен в режиме отладки и мое приложение также встроена в режиме отладки Результат: Приложение успешно выполнена
когда разделяемой библиотеки/DLL построен в режиме выпуска и мое приложение также встроен в режиме выпуска Результат: Приложение успешно выполнена
когда разделяемая библиотека/DLL построен в режиме выпуска и мое приложение также встроена в режиме отладки Результат: приложение терпит крах без загрузки каких-либо символов из стека вызовов.
стека вызовов:!
ntdll.dll 76e94684()
[Фреймы ниже могут быть неправильными и/или отсутствует, никакие символы, загруженные для ntdll.dll]ntdll.dll 76e7d55f()
ntdll.dll! 76e5fa18()
ntdll.dll! 76e2b3c8()
Эта проблема наблюдается, когда я пытаюсь использовать следующую SetName () и GetName() в моем приложении.
using namespace std;
void main()
{
Schema * schemaExp = new Schema();
schemaExp -> SetName("ExpSchema");
string srctable;
srctable=schemaExp->GetName();
cout <<"\nConnection EXPORT using the target table:" << srctable.c_str() << endl;
delete schemaExp;
}
схемы Определение класса:
using namespace std;
class Schema
{
public:
TELAPI_EXPORT void SetName(char *name);
TELAPI_EXPORT string GetName();
protected:
string tableName;
};
void Schema::SetName(char *name)
{
string str(name);
tableName = str;
}
string Schema::GetName()
{
return tableName;
}
Примечание: Выше один лишь часть из моего приложения и мое приложение получает сбой только в # 3 и работает нормально с # 1 и # 2 случаи выше
Пожалуйста, помогите мне в решении этой проблемы. Любая помощь очень ценится.
Заранее благодарен.
, когда я комментирую *** delete schemaExp; ***, я не получаю вышеуказанную ошибку ... полностью путают с таким поведением – ybc
Это имеет смысл, если проблема заключается в несоответствии стратегий распределения памяти. Удаление памяти, выделенной другим менеджером кучи, является неопределенным поведением. –
для вас вопрос: если вы хотите, чтобы оптимизация была включена для одного, почему вы хотите, чтобы они были подавлены для другого? Я хочу сказать, если предоставленные dlls построены в режиме выпуска, и я написал собственное приложение и построил приложение, связанное с DLL, теперь, если мне нужно отлаживать собственный код для любой проблемы, мне нужно создать мое приложение в режиме Debug и как вы сказали, это приводит к конфликту с ЭЛТ. Как действовать в таком случае? – ybc