У меня проблемы со следующим фрагментом кода. Я использую Boost для умножения матриц. Я использую Gtesting для тестирования своего кода. Когда я тестирую следующий бит кода, я получаю следующую ошибку.
Segmentation fault (core dumped)
Я знаю, что это связано с указателями, которые я использую, но я не могу найти ошибку. Я попробовал пару вещей, но безуспешно. Мой код следующий. Я использую Ubuntu 14.04.
BLAS::matrix<double>* PolyFilter::getCoef(const std::queue<double> y const std::queue<double> x, const BLAS::vector<double>& w)
{
int size = y.size();
queue<double> yList = y;
BLAS::matrix<double> pos(size,1);
BLAS::matrix<double>* vand = makeVandermondeMatrix(x);
BLAS::matrix<double>* weights = makeDiag(w);
BLAS::matrix<double> *temp1,*temp2,*temp3,*temp4,*temp5;
BLAS::matrix<double>* temp6 = new BLAS::matrix<double>(size,size);
std::cout<<size<<endl;for( unsigned int i = 0; i < size; i++)
{
pos.insert_element(i,0,yList.front());
yList.pop();
}
*temp1 = BLAS::prod(BLAS::trans(*vand), *weights);
*temp2 = BLAS::prod(*temp1, *vand);if( rfalInverse(*temp2, *temp3) )
{
*temp4 = BLAS::prod(*temp3, BLAS::trans(*vand));
*temp5 = BLAS::prod(*temp4,*weights);
*temp6 = BLAS::prod(*temp5, BLAS::trans(pos));
}return temp6;
}
Спасибо за любую помощь. Эта ошибка сводит меня с ума.
Вы объявили несколько указателей:
BLAS::matrix<double> *temp1,*temp2,*temp3,*temp4,*temp5;
И тогда вы немедленно приступаете к разыменованию неинициализированных указателей:
*temp1 = BLAS::prod(BLAS::trans(*vand), *weights);
*temp2 = BLAS::prod(*temp1, *vand);
Там твоя проблема.
Постскриптум Вы должны потратить некоторое время на изучение того, как использовать отладчик. Это должно быть тривиально, чтобы разобраться с отладчиком.
Других решений пока нет …