2017-07-28 36 views
0

我有一個cholmod_dense數據結構:索引到CHOLMOD緻密矢量陣列

cholmod_dense* ex = cholmod_l_solve(CHOLMOD_A, L, B, &com);

和我要提取的值,並將它們複製到另一個變量。這意味着我需要索引到雙數組並複製值。

for (int k=0; k<ncols; k++) T_x[k]=((double*)ex->x)[k]; 

哪個編譯器可以,但我得到一個分段錯誤。或者,我想我應該能夠做到:

double* e_x =(double*)ex->x; 
for (int k=0; k<ncols; k++) T_x[k]=*e_x[k]; 

但是,編譯器真的不喜歡這樣的:

error: invalid type argument of unary ‘*’ (have ‘double’) 
for (int k=0; k<ncols; k++) T_x[k]= *e_x[k]; 

根據CHOLMOD userguide:

  • cholmod dense:密集矩陣,無論是實數,複數還是zomplex,按列主序排列。這與C中使用的行主約定不同。稠密矩陣X包含 •X-> x,這是一個尺寸爲X> nzmax的雙數組,或者是複數情況的兩倍。 •X-> z,如果X是zomplex,則是一個尺寸爲X-> nzmax的雙數組。
  • 所以我應該能夠簡單地抓取EX-> x和指數成其爲雙陣列,但沒有得到一個分段錯誤,我不能這樣做。誰能幫我嗎?

    CHOLMOD庫是用C編寫的,鏈接到CHOLMOD庫(上面顯示的代碼片段)的代碼是C++。

    +0

    哪種語言,C **或** C++,因爲它們是兩種不同的語言?例如,C++有'std :: vector'和'std :: array',其中可以有一個向量數組。 C語言只有固定大小的數組。另外,C++語言有'static_cast <>'。 –

    +0

    請編輯您的文章與編譯器的「不喜歡」文本。 –

    +0

    什麼是'ncols'? – Alex

    回答

    0

    好的,所以它看起來很喜歡我犯了一些錯誤。

    首先,我遇到了分段錯誤,因爲我使用的是cholmod_l_zeros();,它假設爲long integers。相反,我應該使用cholmod_zeros();,因爲我使用的是doubles

    解決此問題之後,我在我的cholmod_solve(CHOLMOD_A, L, B, &com);聲明之後立即遇到了錯誤CHOLMOD error: invalid xtype。這是因爲我的cholmod_factor* L被定義爲超出範圍。固定這兩個問題之後,從cholmod_dense ex->x double array到我T_x double vector代碼成功複製值:

    cholmod_dense* ex = cholmod_solve(CHOLMOD_A, L, B, &com); 
    double* e_x = (double*)ex->x; 
    for (int k=0; k<ncols; k++) T_x[k] = e_x[k]; 
    

    我也沒有察覺到的[]運營商將自動取消引用指針。很高興知道!