2017-10-13 182 views
0

在一個類方法的if語句的主體中分配兩個數組,這是一個依賴於輸入的數據,在我的情況下,它從未爲真。因此,就我而言,這兩個數組從未被分配。但是這個類的析構函數刪除了這兩個[unallocated]數組。使用impi庫刪除未分配內存時的問題

我從來沒有使用不同的MPI庫和C++編譯器的代碼(基於C++ MPI + OpenMP的)出現任何錯誤,除非我開始使用impi庫。

代碼是確定運行,直到它到達端,然後與退出代碼6或11

我固定此bug拋出消息「的其中一個應用進程的BAD TERMINATION」,但現在我只是好奇爲什麼這會發生在impi上,以及如何以最安全的方式刪除一個未分配的數組。

+3

我們可以看到一些代碼,而不是描述你做了什麼嗎?請參閱https://stackoverflow.com/help/mcve – orhtej2

回答

1

如何以最安全的方式刪除未分配的數組。

始終初始化您的變量。在這種情況下初始化nullptr這是安全的指針傳遞給delete後:

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

但即使最好使用std::unique_ptrstd::shared_ptr這是正確的默認initailized和管理內存。