#include <iostream>
#include <fstream>
int main(int argc, char* argv[])
{
const std::string string_2 = "string_2";
const std::string string_1 = "string_1";
std::cout << string_2 << std::endl;
std::cout << string_1 << std::endl;
std::fstream beep("abcd");
std::cout << string_2 << std::endl;
std::cout << string_1 << std::endl;
printf("%s", string_1.c_str());
}
Я использую CMake. Когда я запускаю это с set(CMAKE_CXX_FLAGS_RELEASE "-O0 -DNDEBUG")
, я получаю следующий неверный вывод:
string_2
string_1
string_2
╘ ±o☻
╘ ±o☻
Но когда я запускаю его после компиляции с -03
, проблема не существует.
Ясно, что значение string_1
было изменено путем создания экземпляра ifstream
.
Если я изменю код для определения string_2
после string_1
, вместо него будет string_2
,Если я сделаю строки статичными, то никаких изменений не произойдет.
Итак, что мне ясно, так это то, что последняя определенная строка, которая не является статичной, имеет значение, поврежденное при создании экземпляра fstream
.
Почему это могло произойти?
Я использую CLion 2019.1, использую среду MinGW (mingw-w64 \ i686-8.1.0-posix-dwarf-rt_v6-rev0 \ mingw32)
Использование встроенного CMake и MinGW в комплекте g ++.