我编写了一个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");
答案 0 :(得分:0)
重新格式化的代码会很好......
一个问题是你没有声明尺寸变量。另一个问题是声明数组的[size]符号仅适用于编译时已知的大小。您想要使用malloc()
。
答案 1 :(得分: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));
...