0
私は今MPIの演習をしています。私の仕事では、私はNの階乗を計算したいので、コマンドラインで2番目の引数でNを渡し、すべてのコードは、char *からintに変換しようとした行を除いてうまくいっています(これは1つのプロセス)、私にこのような状況ではいくつかのアドバイスをお願いし、ここに私のコードは次のとおりです。MPIプログラムの引数を変換するときにエラーが発生する
int main(int argc, char* argv[]){
if(argc != 2){
fprintf(stderr, "\nYou must follow this format to run the program: [Program's name] [N]");
exit(0);
MPI_Finalize();
}
long int n = 1;
n = strtol(argv[1], NULL, 10); // <-- problem happens here
// Initialize MPI
MPI_Init(&argc, &argv);
// Receive the whole size and id of each rank
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank == 0){
// Process for master
master(n);
}
else{
// Process for slaves
slave();
}
// Finish MPI
MPI_Finalize();
return 1;
}
どんな答えが高く評価され、私の記事を読んありがとうございました。
申し訳ありませんが、私のコードを変更した後、私はまだ "STATUS_ACCESS_VIOLATION"という問題に直面しており、問題は次の行で起こります: n = strtol(argv [1]、NULL、10); –
デバッガや* printf-debugging *を使って 'argv [1]'のconentを判断しましたか? – Zulan
ありがとうございました、私はスレーブに送信するときに私のデータを保持する私の配列のサイズを増やした後に私の問題を解決しました(ここで問題は私の古い配列は私のBig Int変数から十分なデータを保持できないということです))。静的配列を動的に変更することでコードを改善する必要があると思います。ポインタをmpiの関数を送信する際にいくつかの問題に直面して、すべての配列を静的に変更する必要がありました。とにかく、ありがとうございました。 –