Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
hdnn
11 / 11 / 3
Регистрация: 14.11.2012
Сообщений: 48
Завершенные тесты: 1
#1

Разный результат работы функции в release и debug - C++

04.02.2014, 13:36. Просмотров 445. Ответов 4
Метки нет (Все метки)

Такая проблема. Есть программа, в которой объявляется переменная типа std::string. Ниже вызывается функция, реализованная в dll, принимающая данные в формате void*. А в самой функции заполняем эту строку каким-то текстом. В релиз и дебаг версиях dll-ки значения на выходе разные. Если использовать MFC-шный CString вместо STL-вского string - всё проходит корректно.

Функция exe-шника:
C++
1
2
3
4
5
6
int CTesJobTab2::SetDataLog(void)
{
    string sdata;
    m_work->GetParam(33333, &sdata);
    return 0;//DEBUG:sdata=="1TEST", RELEASE: sdata=="T"
}
Функция DLL:
C++
1
2
3
4
5
6
7
8
9
10
int CGeneralWork::GetProperty( int key, void* data)
{
    switch (key)
    {
    case 33333:
        (string*)data->append("1TEST");
    break;
    }
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 13:36     Разный результат работы функции в release и debug
Посмотрите здесь:
C++ Release/Debug
C++ Debug и Release разница?
Release работает, Debug - ошибка C++
C++ Неопределенное поведение в Debug и Release
difference between debug and release MVS2010 C++
C++ В чем разница между Debug and Release?
C++ Debug и Release сборки в Visual Studio
Как получить состояние (release/debug) проекта? C++
C++ Visual Studio 2017 режим Debug и Release C++
Проблемы с кодировкой при переключении из Debug в Release в MSVS 2010 C++
C++ Найти результат работы функции
Каков будет результат работы функции? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.02.2014, 05:33     Разный результат работы функции в release и debug #2
Цитата Сообщение от hdnn Посмотреть сообщение
В релиз и дебаг версиях dll-ки значения на выходе разные.
Как видите, что разные? Почему имена функций разные: GetParam(), GetProperty()?
hdnn
11 / 11 / 3
Регистрация: 14.11.2012
Сообщений: 48
Завершенные тесты: 1
05.02.2014, 10:54  [ТС]     Разный результат работы функции в release и debug #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Как видите, что разные?
Пишем приходящие сообщения в лог и смотрим.
Цитата Сообщение от alsav22 Посмотреть сообщение
Почему имена функций разные: GetParam(), GetProperty()?
GetParam() - функция класса, загружающего и взаимодействующего с dll. А внутри ф-ии GetParam просто вызывается GetProperty().

Пока решили использовать char* для вычитывания сообщений. Не так удобно, но работает как часы.

Добавлено через 22 минуты
Корень проблемы, судя по всему, кроется в различных механизмах выделения памяти под релизом и дебагом. Мы можем просто скопировать кусок памяти с сообщением в нужный момент.
STL не хочет корректно работать для случая обмена данными между exe и dll. Хотелось бы понять почему.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.02.2014, 10:58     Разный результат работы функции в release и debug #4
C++
1
(string*)data ->append("1TEST");
У меня такое не компилируется.
hdnn
11 / 11 / 3
Регистрация: 14.11.2012
Сообщений: 48
Завершенные тесты: 1
05.02.2014, 11:11  [ТС]     Разный результат работы функции в release и debug #5
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
(string*)data ->append("1TEST");
У меня такое не компилируется.
Моя описка, не хватает скобок...
C++
1
((string*)data) ->append("1TEST");
Yandex
Объявления
05.02.2014, 11:11     Разный результат работы функции в release и debug
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru