0

ここで少し助けが必要です。opemmp を使用しようとすると、セグ フォールトが発生します。#pragma にコメントすると... プログラムは正常に実行されますが、#pragma を使用すると seg やその他の警告が表示されます。何が間違っているのかわかりません。これが私のコードです。

http://pastebin.com/KXrkxQXx

-g3 で gdb にコンパイルしますが、seg fault が発生すると言います

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff70eb700 (LWP 19010)]
0x0000000000400c5a in condicoes_iniciais ()

手伝ってくれてありがとう。悪い英語でごめんなさい。

4

1 に答える 1

0

私はあなたのコードを完全には読んでいませんが、あなたに伝えることができるエラーを見ました.

125 行目でメモリを割り当て、xnew140 行目でこのポインタをすべてのスレッドにプライベートにします。OpenMP で変数をプライベートとして宣言すると、その値は最初は定義されていないため、割り当てられたメモリへのアドレスが失われます。例えば:

int a = 10;
#pragma omp parallel private(a)
{
  a += 5; // wrong, a is not initialized in the thread
}

この問題を解決するには、 として宣言xnewfirstprivateます。他の変数でも同じことが起こります。

于 2013-09-16T17:12:49.107 に答える