2017-10-13 4 views
0

1つのクラスメソッドのifステートメントの本体に2つの配列が割り当てられています。これは入力依存で、私の場合はTrueです。したがって、私の場合、これらの2つの配列は決して割り当てられていません。しかし、このクラスのデストラクタはこれら2つの[割り当てられていない]配列を削除します。impiライブラリを使用して割り当てられていないメモリを削除するときのバグ

impiライブラリの使用を開始したときを除いて、私はこのコード(C++ MPI + OpenMPベース)で異なるMPIライブラリとC++コンパイラを使用したことがありませんでした。

コードは、それが最後に到達した後、終了コード6または11

のいずれかでメッセージ「アプリケーション・プロセスのうちの一つのBAD終了を」スローするまで私は今、このバグを修正し、しかし、[OK]を実行しました。なぜこれがimpiで起こるのか、割り当てられていない配列を最も安全な方法で削除することができるのはどうか不思議です。

+3

あなたのしたことの説明ではなく、コードを見ることができますか? https://stackoverflow.com/help/mcveを参照してください。 – orhtej2

答えて

1

最も安全な方法で未割り当ての配列を削除する方法。

常に変数を初期化してください。

sometype *pointer = nullptr; 
if(condition) { 
    pointer = new sometype[size]; 
    // dealing with it 
} 
... 
delete [] pointer; 

それでもきちんとinitailizedデフォルトとメモリを管理しているstd::unique_ptrまたはstd::shared_ptrを使用することをお勧めし:この場合、後でdeleteに合格しても安全ですnullptrでポインタを初期化します。

関連する問題