Создание экземпляра fstream повреждает последний определенный std :: string для -O0, но не -03 - PullRequest
3 голосов
/ 08 октября 2019
#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 ++.

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