使用impi库删除未分配的内存时出错

时间:2017-10-13 15:45:45

标签: c++ memory compilation mpi dynamic-memory-allocation

在一个类方法的if语句的主体中分配了两个数组,这是一个依赖于输入的语句,在我的例子中,它从来就不是True。因此,就我而言,这两个数组从未被分配过。但是这个类的析构函数删除了这两个[未分配的]数组。

使用不同的MPI库和C ++编译器时,我从未遇到过使用此代码(基于C ++ MPI + OpenMP)的任何错误,除非我开始使用impi库。

代码运行正常,直到它到达结尾然后抛出消息“BAD TERMINATION OF ASOUR APPLICATION APPLICATIONES”,退出代码为6或11。

我修复了这个错误,但现在我只是好奇为什么会发生impi以及如何以最安全的方式删除未分配的数组。

1 个答案:

答案 0 :(得分:1)

  

如何以最安全的方式删除未分配的数组。

始终初始化变量。在这种情况下,使用nullptr初始化指针,以后可以安全地传递给delete

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

但更好的是使用std::unique_ptrstd::shared_ptr正确默认启动并管理内存。