C ++ - 通过 Boost 进行反向替换 - 错误的索引错误

C++ - Back Substitution via Boost - Bad Index Error

我有以下用于反向替换算法的代码:

#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 有关,我不确定该数字可能来自何处,因为它并不适合其他我的代码的一部分。

最后,我还写了一个前向替换算法,使用非常相似的结构,运行没有问题。

有人知道发生了什么事吗?

对于 iunsigned 类型,条件 i>=0 始终 为真。

如果您编译时出现警告(-Wall -Wextra -pedantic 在您的 GCC/Clang 上),那么编译器会告诉您这一点。