fstream крашит программу, но только через IDE всё работает

Пишу игру и создал загрузку карты и логи. Загрузка чанка работает только один раз, при повторной загрузке всё крашится. Код:

    logout << "[CORE]: [LOAD]: [LOADCLUSTER]: <info>: in_time: [" << (GetTime().c_str()) << "]: Entered in LoadCluster function" << '\n';
    ifstream in_data;
    string nameclst = "files/worldinfo/cluster_" + to_string(x) + "_" + to_string(y) + ".clst";
    logout << "[CORE]: [LOAD]: [LOADCLUSTER]: <info>: in_time: [" << (GetTime().c_str()) << "]: Loading data from: " << nameclst << '\n';
    in_data.open(nameclst, ios::in);
    cout << "reading information from cluster: " << nameclst << "\n";
    string in_dstr = "";
    loadedCluster = {x, y};
    unsigned int line = 0;
    while(1)
    {
        getline(in_data, in_dstr);
        if(in_dstr == "end")
            break;
        if(in_dstr == "start")
            getline(in_data, in_dstr); line++;
        if(in_dstr == " "){
            logout << "[CORE]: [LOAD]: [LOADCLUSTER]: <error>: in_time: [" << (GetTime().c_str()) << "]: File: " << nameclst << " breaked or have no information" << '\n';
            MessageBox(NULL, (string("Cannot load information from cluster: ") + (nameclst)).c_str(), "Engine error", MB_ICONWARNING | MB_OK);
            return 1;
            break;
        }
        //обработка строки
        line++;
        _sleep(1);
    }

В логах вообще всё плохо. Если запускаться через IDE то все логи читает и перезаписывает, но если запускаться без IDE через exe, то всё крашится при заходе в функцию. Код:

void CreateNewLog()
{
    string witinglogs = "";
    witinglogs += "[SYSTEM]: <info>: in_time: [" + string(GetTime().c_str()) + "]: CORE started" + '\n';
    witinglogs += "[CORE]: [LOGS]: <info>: in_time: [" + string(GetTime().c_str()) + "]: Mathing logs" + '\n';
    ifstream logCount("logs/logCount.math");
    logout.close();
    ifstream login("logs/latestLog.log");
    string logs;
    getline(logCount, logs);
    int logsc = stoi(logs);
    logCount.close();
    ofstream logCounte("logs/logCount.math");
    logCounte << logsc + 1;
    witinglogs += "[CORE]: [LOGS]: <info>: in_time: [" + string(GetTime().c_str()) + "]: Mathed " + to_string(logsc) + " logs" + "\n";
    string logtr = "logs/Log#" + to_string(logsc) + ".log";
    ofstream logOld(logtr);
    string readedLog = "";
    getline(login, readedLog);
    witinglogs += "[CORE]: [LOGS]: <info>: in_time: [" + string(GetTime().c_str()) + "]: Rewriting logs" + "\n";
    int lines = 0;
    while(readedLog != "[QUIT]")
    {
        lines++;
        if(readedLog == "[QUIT]" || lines >= 100000)
            break;
        logOld << readedLog << '\n';
        getline(login, readedLog);
    }
    logOld << "[QUIT]";
    witinglogs += "[CORE]: [LOGS]: <info>: in_time: [" + string(GetTime().c_str()) + "]: Rewrited " + to_string(lines) + " lines" + "\n";
    logOld.close();
    login.close();
    logout.open("logs\\latestLog.log", ios_base::trunc);
    logout << witinglogs;
}

Пользуюсь IDE Code::Blocs.


Ответы (1 шт):

Автор решения: 111vkg1

У меня получилось исправить ошибку. Я просто вынес все объявления ifstream и ofstream в отдельные функции и вместо чтения и перезаписи файла просто использовал std::filesystem::copy(). Как я понял если объявлять сразу два потока, то они могут обращаться к уже занятой памяти.

Спасибо всем тем, кто пытался помочь мне с решением проблемы. Благодаря вам я не сдался, продолжил работу и добился результата.

→ Ссылка