Утечка памяти при использовании GLM

Я использую glm (Opengl Math) в своем проекте SDL+OpenGL. Но я заметил, что код может пропускать память. Вот пример:

#include <glm/glm.hpp>

int foo()
{
        glm::vec4 Position = glm::vec4(glm::vec3(0.0), 1.0);
        glm::mat4 Model = glm::mat4(1.0);
        Model[4] = glm::vec4(1.0, 1.0, 0.0, 1.0);
        glm::vec4 Transformed = Model * Position;
        return 0;
}

В первой строке мы создаем новый экземпляр glm::vec3, но в конце функции не освобождаем выделенную память. Если я вызову функцию foo в цикле, будет ли утечка памяти?


person Iter Ator    schedule 23.11.2015    source источник
comment
Выделения стека всегда освобождаются, когда они выходят за рамки. Освобождать нужно только выделение кучи (что здесь не так).   -  person BDL    schedule 24.11.2015
comment
Вы не теряете память, но если glm не использует индексы на основе 1, доступ к Model[4] является неопределенным поведением.   -  person sbabbi    schedule 24.11.2015


Ответы (2)


Поскольку экземпляры не создаются с использованием new, они будут помещены в стек, а не в кучу. Поэтому, когда стек, используемый foo, очищается, память для этих экземпляров будет восстановлена.

person Nick Cano    schedule 23.11.2015

Создаваемые вами переменные имеют автоматический срок хранения, то есть они будут автоматически очищаться, когда выходят за пределы области действия.

Для временного glm::vec3 это конец оператора. Так что никакой утечки памяти здесь нет.

Утечки памяти могут происходить только при использовании длительности динамического хранения, то есть переменных, выделенных с помощью new или malloc.

person emlai    schedule 23.11.2015