1

私はmpiを初めて使用し、行列式を計算するプログラムをC ++で作成したいと考えています。このプログラムを作成しようとすると、mpiコンパイラでコンパイルしようとするとこのエラーが発生します。

#include "mpi.h"
#include <iostream>
#include <stdio.h>
#include "/usr/include/malloc.h"

using namespace std;




int matrix[3][3] =  {{1,2,3},
                     {4,5,6},
                     {7,8,9}};

//**************


int** MakeMatrix (int** oldMatrix,int I,int J,int m,int n)
{
 int** newMatrix = (int**)malloc(sizeof(int*)*J);
 for(int i=0;i<J;i++)
 {
  newMatrix[i] = (int*)malloc(sizeof(int)*I);
 }
 for(int i=0;i<I-1;i++)
  for(int j=0;j<J-1;j++)
   if(i>=m)
    if(j>=n)
    {
     newMatrix[i][j]=oldMatrix[i+1][j+1];
    }
    else
    {
     newMatrix[i][j]=oldMatrix[i+1][j];
    }
   else
   {
    newMatrix[i][j]=oldMatrix[i][j];
   }
 return newMatrix;
}

 ///////////////////////

int determinan (int** lmatrix,int I,int J)
{
 if(I*J==1)
 {
  return lmatrix[I-1][J-1];
 }

 int minus = -1;
 int sum = 0;
 for(int j=0;j<J-1;j++)
 {
  for(int k=1;k<I+j+1;k++,minus*=minus);
  sum += minus*lmatrix[0][j]*determinan(MakeMatrix(lmatrix,I,J,0,j),I-1,J-1);
 }

 return sum;
}

///*************


int main(int argc,char **argv)
{
 //MPI_Init(&argc,&argv);
 cout<<determinan((int**)matrix,3,3)<<'\n';
 //MPI_Finalize();
 return 0;
}

そしてここにエラーメッセージがあります:

===================================================================================
=   BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
=   EXIT CODE: 11
=   CLEANING UP REMAINING PROCESSES
=   YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault (signal 11)
This typically refers to a problem with your application.
Please see the FAQ page for debugging suggestions
4

1 に答える 1

0

私は複数の問題があると確信しています。直接のものは、キャストされた型です:

cout<<determinan((int**)matrix,3,3)<<'\n';
                 ^^^^^^^

matrixはポインタの配列ではないため、これは有効なキャストではありません。

于 2013-01-25T18:00:55.463 に答える