在一个类方法的if语句的主体中分配了两个数组,这是一个依赖于输入的语句,在我的例子中,它从来就不是True。因此,就我而言,这两个数组从未被分配过。但是这个类的析构函数删除了这两个[未分配的]数组。
使用不同的MPI库和C ++编译器时,我从未遇到过使用此代码(基于C ++ MPI + OpenMP)的任何错误,除非我开始使用impi库。
代码运行正常,直到它到达结尾然后抛出消息“BAD TERMINATION OF ASOUR APPLICATION APPLICATIONES”,退出代码为6或11。
我修复了这个错误,但现在我只是好奇为什么会发生impi以及如何以最安全的方式删除未分配的数组。
答案 0 :(得分:1)
如何以最安全的方式删除未分配的数组。
始终初始化变量。在这种情况下,使用nullptr
初始化指针,以后可以安全地传递给delete
:
sometype *pointer = nullptr;
if( condition ) {
pointer = new sometype[size];
// dealing with it
}
...
delete [] pointer;
但更好的是使用std::unique_ptr
或std::shared_ptr
正确默认启动并管理内存。