Pull to refresh

Comments 2

Исправить это можно, удалив лишнюю инициализацию, если она не нужна, или заменив индекс массива на последующий, – это уже зависит от значения переменной count.

Здесь, на самом деле, куда более странный кусок. По самому коду предполагается, видимо, что авторы хотят создать и проинициализировать массив размером count * 3 в виде, соответственно, стека длины count из трёхмерных векторов. Вот только создают они на самом деле стек длины count * 3:


template<class T>
dgStack<T>::dgStack (dgInt32 size)
    :dgStackBase (dgInt32 (size * sizeof(T)))
{
    m_size = size;
}

После чего заполняют только первую треть полученной области памяти. Используются тоже только первые count элементов:


for (dgInt32 i = 0; i < count; i ++) {
    dgVector p1 (tmp[i] + step);
    dgVector p2 (tmp[i] - step);
    // используем p1 и p2
}

Выглядит так, как будто автор обсуждаемого кода попросту неправильно понял использование конструктора dgStack и указал размер искомой области в виде числа элементов внутренних векторов (тогда как правильно — в виде числа самих векторов).


Ну и да, "заменять индекс массива на последующий" (2 на 3, соответственно) здесь именно что необходимо, т.к. dgVector — это на самом деле вообще четырёхмерный вектор, c компонентами [x, y, z, w]:


DG_INLINE dgVector(dgFloat32 val)
    :m_x(val), m_y(val), m_z(val), m_w(val)
    {
    }

и компонента w остаётся неинициализированной (правда, в нынешнем коде она потом всё равно нигде не используется).

Sign up to leave a comment.