Режимы отладки и выпуска с разными выходами - PullRequest
0 голосов
/ 22 марта 2011

В моей программе есть функция, которая выводит структуру данных, которая состоит из трех двойных чисел в двух форматах: один текстовый и один двоичный.

Когда я запускаю программу в режимах отладки и выпуска, я получаю разные двоичные выходы, но идентичные текстовые выходы. Что происходит?

Вот код двоичного вывода:

void outputPoints(xyz* points, string description, int length, param parameters)
{

    stringstream index;
    index.str("");
    index << setw( 3 ) << setfill( '0' ) << parameters.stage;

    string outputName = parameters.baseFileName + " " + index.str() + " " + description + ".bin"; // create file name

    ofstream output; // create output object

    cout << "Output " << outputName.c_str() << "...";

    output.open(outputName.c_str(), std::ios::binary | std::ios::out); // open or create file for output
    output.write(reinterpret_cast<char*>(points), (sizeof(xyz) * length));
    output.close(); // close output object

    cout << "done" << endl;
}

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Сборка отладки обычно инициализирует переменные с некоторыми шаблонами Обычно выделенные данные имеют содержимое CDCD, удаленные объекты перезаписываются с помощью FEEE. Шаблон CDCD перезаписывается при инициализации переменных. Сборка релиза не инициализируется с этими шаблонами.

Стоит проверить вашу программу на наличие неинициализированных переменных. Вы можете определить функцию Dump, которая просто печатает (первые несколько байтов) предполагаемые переменные.

0 голосов
/ 17 января 2012

Я не знаю, есть ли у вас решение для вашей проблемы, и я не смотрел на ваш код. У меня была та же проблема, потому что я добавлял unsigned char и unsigned short и сохранял в unsigned short. Я изменил все переменные на unsigned short, и проблема была решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...