утечка памяти при записи в файл в потоке
От: arfaa  
Дата: 25.05.20 14:23
Оценка:
Добрый день, есть поток, бесконечный(он же сервис), в котором постоянно происходит запись в файл и вот при записи в файл происходит утечка памяти, не могу понять почему, может кто скажет, вот исходный код:
void functionInThread()
{
    std::vector<wchar_t> pathBuf;
        DWORD copied = 0;
        pathBuf.resize(pathBuf.size() + MAX_PATH);
        copied = GetModuleFileName(0, &pathBuf.at(0), pathBuf.size());
        QString servicePath;
        for (int i = 0; i < pathBuf.size(); i++)
        {
            if (pathBuf.at(i) == L'\0')
                break;
            servicePath.append(pathBuf.at(i));
        }
        int indexDelete = servicePath.toStdString().find_last_of('\\');
        servicePath.remove(indexDelete + 1, servicePath.size());
        QString _filePath = servicePath;
        //std::ofstream outfile;
        QString applogPath = _filePath + "AppLog.txt";
        //outfile.open(applogPath.toStdString(), std::ios_base::app); // append instead of overwrite

        boost::posix_time::ptime timeLocal = boost::posix_time::second_clock::local_time();
        std::string date_str = "[ " + std::to_string(timeLocal.time_of_day().hours()) + ":" + std::to_string(timeLocal.time_of_day().minutes()) + ":" + std::to_string(timeLocal.time_of_day().seconds()) + " " +
            std::to_string(timeLocal.date().day()) + "-" + std::to_string(timeLocal.date().month()) + "-" + std::to_string(timeLocal.date().year()) + " ] ";

        std::string logLevel_str = " [!!!] ";

        QFile file(applogPath);
        if (file.open(QFile::Append))
        {
            QTextStream out(&file);
            out << date_str.c_str() << message.c_str() <<'\n';
        }
        file.close();

        //outfile << date_str << logLevel_str << message;
        //outfile << "\n";
        //outfile.close();
}


как видно в коде, пробовал и через QFile и через std::ofstream, если закомментировать строку ввода в поток :
out << date_str.c_str() << message.c_str() <<'\n';
или 
outfile << date_str << logLevel_str << message;

то утечки нет, почему так происходит и как с этим бороться?
Отредактировано 25.05.2020 14:24 arfaa . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.