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



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

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

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

有人知道发生了什么吗?

> i>=0条件对于unsigned类型的i始终为真。

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

相关内容

  • 没有找到相关文章