2012-11-12 54 views
2

我有一個問題,我認爲可能有一個簡單的答案,但我沒有在任何地方找到任何文檔來確認我的懷疑。數組 - 錯誤:賦值中的不兼容類型

我的程序是乘以兩個矩形矩陣,整個代碼有點長,所以我只是粘貼下面的相關部分。當我編譯我的代碼時,我不斷收到「錯誤:賦值中的不兼容類型」消息。我試圖將子矩陣suba,subb,subc分配給a,b和c的相應部分。這是因爲我使用變量v和w int行28 - 32?另外,爲了確保我有正確的概念,如果我將矩陣的左上角分配給「子矩陣」,那麼我只是分配一個指針(如subb)以在大的指定位置開始矩陣,對嗎?

在此先感謝您的幫助!這是非常appreiciated

struct threads 
{ 
    pthread_t id; //The thread id to use in functions 
    int n; //size of block 
    float **suba; //Sub-matrix a 
    float **subb; //Sub-matrix b 
    float **subc; //Sub-matrix c 
}; 

int main(int argc, char* argv[ ]) 
{ 
    int n; // dimension of the matrix 
    int p; // number of threads in the program 
    float *sa, *sb, *sc; // storage for matrix A, B, and C 
    float **a, **b, **c; // 2-d array to access matrix A, B, and C 
    int i, j; 
    struct threads* t; 

    t = (struct threads*) malloc(p * sizeof(struct threads)); 

    int x = -1; 
    int z; 
    for(z = 0; z < p; z++) 
    { 
    t[ z ].n = n/sqrt(p); 
    if(fmod(z, sqrt(p)) == 0) 
     x++; 
    int w = (int)(x * n/sqrt(p)); 
    int v = (int)(fmod(z, sqrt(p)) * n/sqrt(p)); 
    t[z].suba = a[ w ][ v ]; 
    t[z].subb = b[ w ][ v ]; 
    t[z].subc = c[ w ][ v ]; 

    //pthread_create(&t[ z ].id, 0, threadWork, &t[ z ]); 
    } 

    return 0; 
} 
+0

閱讀第6(http://www.c-faq.com)。 –

回答

1

t[z].suba的類型是float **

a[w][v]float型的。

你的意思是[comp.lang.c常見問題]的

t[z].suba[w][v] = a[w][v]; ? 
+0

我沒有注意到那個部分,那是我的錯誤。我試圖讓't [z] .suba'的左上角等於'a [w] [v]'。但我只是意識到爲了發生這種情況而不會出現分段錯誤,我需要初始化'suba,subb,subc'的兩個維度。感謝您的幫助!回到繪圖板。 – wmarquez