C++ - обратная замена через Boost - ошибка неверного индекса

У меня есть следующий код для алгоритма обратной замены:

#include <boost\numeric\ublas\matrix.hpp>
typedef boost::numeric::ublas::matrix<double> dM;
dM bSub(dM A, dM b)
{
    unsigned int n = (int)b.size1();
    assert(b.size2() == 1);
    assert(n == A.size1());
    dM x(n, 1);
    for (unsigned i = (n - 1); i >= 0; --i)
    {
        double sum = 0.0;
        for (unsigned j = (n - 1); j > i; --j)
        {
            sum += A(i, j)*x(j, 0);
        }
        x(i, 0) = (b(i, 0) - sum) / A(i, i);
    }

    return x;
}

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

Я также попытался увеличить вложенный цикл: for(unsigned j = 0; j < n; ++j), Я опять сталкиваюсь с той же ошибкой индекса.

Основываясь на отладчике, я думаю, что проблема связана с i каким-то образом принимая значение 4294967295, я не уверен, откуда может взяться это число, поскольку оно не вписывается в другие части моего кода.

Наконец, я также написал алгоритм прямой замены, используя очень похожую структуру, которая работает без проблем.

У кого-нибудь есть идея, что происходит?

1 ответ

Решение

Состояние i>=0 всегда верно для unsigned типы i,

Если вы компилируете с предупреждениями (-Wall -Wextra -pedantic на вашем GCC/Clang), то компилятор скажет вам это.

Другие вопросы по тегам