Ошибка сегментации (дамп ядра) - не удается исправить ошибку

У меня возникли проблемы со следующим фрагментом кода. Я использую 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;

}

Спасибо за любую помощь. Эта ошибка сводит меня с ума.


person user1376339    schedule 08.12.2015    source источник
comment
Где происходит сбой? Запустите отладочную сборку в отладчике, чтобы поймать сбой в действии, и используйте отладчик, чтобы найти место сбоя в коде.   -  person Some programmer dude    schedule 08.12.2015
comment
Вы сказали, что пробовали пару вещей. Что вы пробовали? Вы пробовали использовать gdb?   -  person lurker    schedule 08.12.2015
comment
Сразу очевидная ошибка заключается в том, что вы не инициализируете temp1 (не выделяете место для его указания), а затем присваиваете значение *temp1. Это была оплошность? Или вам нужно изучить основы указателей в C/C++?   -  person JSF    schedule 08.12.2015


Ответы (1)


Вы объявили несколько указателей:

BLAS::matrix<double> *temp1,*temp2,*temp3,*temp4,*temp5;

И тогда вы сразу переходите к разыменованию неинициализированных указателей:

*temp1 = BLAS::prod(BLAS::trans(*vand), *weights);

*temp2 = BLAS::prod(*temp1, *vand);

Вот твоя проблема.

P.S. Вы должны потратить некоторое время на изучение того, как использовать отладчик. Это должно быть тривиально, чтобы выяснить с помощью отладчика.

person Sam Varshavchik    schedule 08.12.2015