Matrix MPI矩阵多重化编译错误:未用代码声明

Matrix MPI矩阵多重化编译错误:未用代码声明,matrix,mpi,Matrix,Mpi,我编写了一个mpi矩阵多重化程序,它使用scanf(“%d”和&size),指定矩阵大小,然后我定义了int-matrix[size*size],但当我编写它时,它报告说矩阵未声明。请告诉我为什么,或者我的问题是什么 根据Ed的建议,我将矩阵定义更改为if(myid==0)块,但得到了相同的错误!现在我发布我的代码,请帮我找出我犯的错误!谢谢大家! int size; int main(int argc, char* argv[]) { int myid, numprocs; int *p

我编写了一个mpi矩阵多重化程序,它使用
scanf(“%d”和&size)
,指定矩阵大小,然后我定义了
int-matrix[size*size]
,但当我编写它时,它报告说矩阵未声明。请告诉我为什么,或者我的问题是什么

根据Ed的建议,我将矩阵定义更改为if(myid==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");
int大小;
int main(int argc,char*argv[]){
int myid,numprocs;
int*p;
MPI_状态;
int i,j,k;
MPI_Init(&argc,&argv);
MPI通信等级(MPI通信世界和myid);
MPI通信大小(MPI通信世界和numprocs);
如果(myid==0)
{       
scanf(“%d”,大小(&S);
int matrix1[大小*大小];
int matrix2[大小*大小];
int matrix3[size*size];
int section=大小/numproc;
int tail=大小%numprocs;
srand((无符号)时间(NULL));

对于(i=0;i重新格式化的代码将很好


一个问题是您没有声明大小变量。另一个问题是声明数组的[size]符号仅适用于编译时已知的大小。您希望使用
malloc()

如果使用动态内存分配,实际上不需要定义最大大小

#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));
...
#包括
#包括
...
scanf(“%d”,大小(&S);
int*matrix1=(int*)malloc(size*size*sizeof(int));
int*matrix2=(int*)malloc(size*size*sizeof(int));
int*matrix3=(int*)malloc(size*size*sizeof(int));
...

重新格式化你的代码怎么样?呵呵,我试过了,但布局似乎不起作用!顺便说一句,我已经解决了这个问题!我试过一个#define MAX_SIZE 500,然后我只使用数组的一部分^u^谢谢,我认为scanf(“%d”,&SIZE)可以在运行时工作!我试过scanf(“%d”,&SIZE);int matrix[SIZE];在我自己的计算机上成功。但在mpi环境下,它太糟糕了!这就是我的感受!