2015-12-08 57 views
0

我在遇到以下一段代碼時遇到了問題。我正在使用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; 

} 

Thankyou的任何幫助。這個錯誤讓我發瘋。

+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.您應該投入一些時間來學習如何使用調試器。用調試器來解決這個問題應該是微不足道的。