Комментарии 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 остаётся неинициализированной (правда, в нынешнем коде она потом всё равно нигде не используется).
Повторная проверка Newton Game Dynamics статическим анализатором PVS-Studio