Утечка памяти при добавлении uint32_t в очередь в другом пространстве имен - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь помечать объекты для обновления базы данных в пространстве имен «api», помещая их уникальные номера в очередь в пространстве имен баз данных.Это делается с помощью функции flagObjectToUpdate также в пространстве имен «база данных».

При тестировании кода ниже с помощью cppUTest я получаю ряд утечек памяти, и я полностью озадачен тем, как это может вызвать утечку.Я сузил его до приведенного ниже кода, закомментировав все остальные строки кода в стеке вызовов.

Может ли кто-нибудь дать некоторое представление?

namespace api
{
    uint32_t setObjVal(uint32_t objNumber, uint32_t objVal, uint32_t source)
    {
        // set object values
        if(source == EXTERNAL_WRITE)
            dataBase::flagObjectsToUpdate(objNumber);
        return result;
    }
}

namespace database
{
    std::queue<uint32_t> objNumQueue;

    void flagObjectsToUpdate(uint32_t objNumber)
    {
        objNumQueue.push(objNumber);
    }

    uint32_t updateObject(void)
    {
        uint32_t objNum;
        while(!objNumQueue.empty())
        {
            objNum = objNumQueue.front();
            objNumQueue.pop();
            //update objects       
        }
        return result;
    }
}

1 Ответ

0 голосов
/ 02 февраля 2019

Мне не удалось определить основную причину, однако я смог устранить утечку памяти, поместив в класс очередь, flagObjectsToUpdate () и updateObject ().

Я подозреваю, что пользователь Jarod42 был прав, когда заявил, что отчет об утечке памяти был опубликован до уничтожения объекта очереди.

...