2017-10-13 93 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和管理内存。