2009-04-15 72 views
0

我編碼了一個mpi矩陣多用戶程序,它使用scanf("%d", &size),指定了矩陣大小,然後我定義了int matrix[size*size],但是當我遵守它時,它報告矩陣未申報。請告訴我爲什麼,或者我的問題是什麼!MPI矩陣多用途編譯錯誤:未聲明代碼

據愛德的建議下,我改變了矩陣定義如果(身份識別碼== 0)塊,但得到了同樣的犯錯!現在我發佈我的代碼,請幫我找出我犯的錯誤!謝謝!

int size; 

int main(int argc, char* argv[]) { 

int myid, numprocs; 
int *p; 
MPI_Status status; 
int i,j,k; 
MPI_Init(&argc, &argv); 
MPI_Comm_rank(MPI_COMM_WORLD,&myid); 
MPI_Comm_size(MPI_COMM_WORLD, &numprocs); 
if(myid == 0) 
{  
    scanf("%d", &size); 
    int matrix1[size*size]; 
    int matrix2[size*size]; 
    int matrix3[size*size]; 
    int section = size/numprocs; 
    int tail = size % numprocs; 
    srand((unsigned)time(NULL)); 
    for(i=0; i<size; i++) 
    for(j=0; j<size; j++) 
     { 
      matrix1[i*size+j]=rand()%9; 
      matrix3[i*size+j]= 0; 
      matrix2[i*size+j]=rand()%9; 
     }    
     printf("Matrix1 is: \n"); 
     for(i=0; i<size; i++) 
     {    
      for(j=0; j<size; j++) 
       { 
        printf("%3d", matrix1[i*size+j]); 
       }  
      printf("\n"); 
     }   
     printf("\n"); 
     printf("Matrix2 is: \n"); 
+0

如何重新格式化您的代碼? – 2009-04-15 14:06:15

+0

呵呵,我試過了,但佈局好像不行! 順便說一句,我已經解決了這個問題!我嘗試了一個#define MAX_SIZE 500,然後我只使用數組的一部分^ u^ – Johnson 2009-04-16 08:14:40

回答

0

重新格式化代碼將是很好...

的一個問題是,你有沒有聲明的大小可變。另一個問題是用於聲明數組的[size]符號只適用於編譯時已知的大小。您想改爲使用malloc()

0

如果使用動態內存分配,實際上並不需要定義MAX_SIZE。

#include <stdio.h> 
#include <stdlib.h> 
... 
    scanf("%d", &size); 
    int *matrix1 = (int *) malloc(size*size*sizeof(int)); 
    int *matrix2 = (int *) malloc(size*size*sizeof(int)); 
    int *matrix3 = (int *) malloc(size*size*sizeof(int)); 
...