Я использую Visual Studio C ++, и он отлично работает в режиме выпуска, но не в режиме отладки. Мне нужно запустить его в режиме отладки, чтобы обнаружить потенциальную утечку памяти.
плохой шанс, что кажется работать в режиме выпуска, потому что он не может хорошо работать
Я подозреваю, что приведение к char * является проблемой
вы правы, делаете
string identifier;
identifier.resize(4);
ifstream adtFile(m_nameFile, ios::in | ios::binary);
adtFile.read((char*)&identifier, sizeof(::uint32_t));
вы не записываете во внутренний буфер 4 символа, как ожидалось, а в экземпляр std :: string с неопределенным поведением
Минимальное изменение
string identifier;
identifier.resize(sizeof(::uint32_t));
ifstream adtFile(m_nameFile, ios::in | ios::binary);
adtFile.read((char*)identifier.data(), sizeof(::uint32_t));
даже для удаления const вообще не понятно
Но действительно ли вы этого хотите? зачем использовать std::string
вместо ::uint32_t
как
::uint32_t v;
adtFile.read((char*)&v, sizeof(::uint32_t));
или просто std::vector<unsigned char>
/ std::vector<::uint8_t>
(все еще со всем, что касается порядка байтов)
Содержит ли ваш файл внешнее представление числа (например, символы '1' '2' '3' и '4') или его внутреннее представление (например, байты 0x0 0x0 0x4 0xD2 или 0xD2 0x4 0x0 0x0 в зависимости от порядка байтов, когда файл был создан).
Также может быть интересно проверить возможные ошибки после прочтения.