2009-04-15 73 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)); 
...