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

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

Восстановить пароль Регистрация
 
hdnn
11 / 11 / 3
Регистрация: 14.11.2012
Сообщений: 48
Завершенные тесты: 1
04.02.2014, 13:36     Разный результат работы функции в release и debug #1
Такая проблема. Есть программа, в которой объявляется переменная типа 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
Посмотрите здесь:

Проблемы с кодировкой при переключении из Debug в Release в MSVS 2010 C++
C++/CLI Debug компилируется, а Release - нет
C++ Debug и Release разница?
difference between debug and release MVS2010 C++
Как получить состояние (release/debug) проекта? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 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
5282 / 4801 / 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
Ответ Создать тему
Опции темы

Текущее время: 07:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru