2016-04-27 3 views
1

У меня есть следующий код для алгоритма обратной подстановки:C++ - Назад Замена через 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, я не знаю, откуда это число, поскольку оно действительно не подходит в других частях моего кода.

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

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

ответ

3

Условие i>=0 является всегда верно для unsigned типов i.

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

+0

А я вижу, спасибо! –