Ошибка компиляции матрицы MPI: не объявлено с кодом - PullRequest
0 голосов
/ 15 апреля 2009

Я кодировал программу мультипликации матрицы mpi, которая использует scanf("%d", &size), определяет размер матрицы, затем я определил int matrix[size*size], но когда я выполнил это, он сообщил, что матрица не объявлена. Пожалуйста, скажите мне, почему, или в чем моя проблема!

По предложению Эда я изменил определение матрицы на блок 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");

Ответы [ 2 ]

0 голосов
/ 26 июня 2009

На самом деле вам не нужно определять 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));
...
0 голосов
/ 15 апреля 2009

Переформатированный код был бы хорош ...

Одна проблема в том, что вы не объявили переменную размера. Другая проблема заключается в том, что нотация [size] для объявления массивов подходит только для размеров, известных во время компиляции. Вы хотите использовать malloc() вместо этого.

...