Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

04.02.2014, 13:36. Просмотров 479. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2014, 13:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разный результат работы функции в release и debug (C++):

Release/Debug - C++
Здравствуйте! Пишу сложную расчётную программу. И мне важна скорость выполнения программы. И хотел бы проконсультироваться. Делал с помощью...

Debug и Release разница? - C++
объяснить пожалуйста разница между Debug И Release? и почему после компиляции Debug->Dll fail 460kb а Release->17кб.

Release работает, Debug - ошибка - C++
Подскажите, товарищи. Есть код (взял с форума) : #include <iostream> #include <fstream> #include <string> #include <conio.h> ...

difference between debug and release MVS2010 - C++
Ума не приложу в какую сторону копать:read: Следующий фрагмент кода, в Дебаге работает совершенно верно, а в Релизе какие то ошибки ...

Неопределенное поведение в Debug и Release - C++
Писал программу для сложения больших чисел (в файле содержатся числа с количеством цифр от 1 до 30). При запуске через компилятор всё...

Кодировка в режиме сборки Debug / Release - C++
В проекте использую только Use Multi-Byte Character Set, то есть ASCII. В режиме сборки Debug все работает хорошо. Но, переключаясь на...

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

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

Добавлено через 22 минуты
Корень проблемы, судя по всему, кроется в различных механизмах выделения памяти под релизом и дебагом. Мы можем просто скопировать кусок памяти с сообщением в нужный момент.
STL не хочет корректно работать для случая обмена данными между exe и dll. Хотелось бы понять почему.
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.02.2014, 10:58 #4
C++
1
(string*)data ->append("1TEST");
У меня такое не компилируется.
0
hdnn
12 / 12 / 3
Регистрация: 14.11.2012
Сообщений: 51
Завершенные тесты: 1
05.02.2014, 11:11  [ТС] #5
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
(string*)data ->append("1TEST");
У меня такое не компилируется.
Моя описка, не хватает скобок...
C++
1
((string*)data) ->append("1TEST");
0
05.02.2014, 11:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2014, 11:11
Привет! Вот еще темы с ответами:

В чем разница между Debug and Release? - C++
Какие действия выполняет debug в Visual studio и какие Release, в чем разница? Никогда не задавался этим фундаментальным вопросом, что...

Debug и Release сборки в Visual Studio - C++
Я начал писать проект на c++ с использованием sfml. При сборке тестовой программы в версс debug потребление памяти составляет примерно 22...

Как получить состояние (release/debug) проекта? - C++
Возможно ли получить состояние (release/debug) проекта препроцессором?

C++ Visual Studio 2017 режим Debug и Release - C++
C++ Visual Studio 2017 проблемы с режимом Debug и Release Почему в режиме дебага все нормальное, а в режиме релиза не хочет считать...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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