2015-12-08 2 views
0

У меня возникают проблемы со следующим битом кода. Я использую Boost для выполнения матричного умножения. Я использую Gtesting для проверки кода. Когда я тестирую следующий бит кода, я получаю следующую ошибку.Ошибка сегментации (сбрасывание ядра) -cannot fix error

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; 

} 

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

+0

* Где * происходит авария? Запустите debug-build в отладчике, чтобы поймать крах в действии, и используйте отладчик, чтобы найти сайт сбоя в вашем коде. –

+0

Вы сказали, что попробовали пару вещей. Что вы пробовали? Вы пытались использовать 'gdb'? – lurker

+0

Непосредственная очевидная ошибка заключается в том, что вы не инициализируете 'temp1' (не выделяете пространство для его указания), а затем присваиваете значение' * temp1'. Это был надзор? Или вам нужно изучить основы указателей в C/C++? – JSF

ответ

3

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

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

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

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

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

Там ваша проблема.

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

Смежные вопросы