在一个类方法的 if 语句的主体中分配了两个数组,这是一个输入相关的,在我的例子中,它从来没有为真。因此,在我的例子中,这两个数组从未被分配过。但随后此类的析构函数删除了这两个 [未分配的] 数组。
我在使用不同的 MPI 库和 C++ 编译器时从未遇到过此代码(基于 C++ MPI+OpenMP)的任何错误,除非我开始使用 impi 库。
代码运行正常,直到运行结束,然后抛出消息“您的一个应用程序进程错误终止”,退出代码为 6 或 11。
我修复了这个错误,但现在我只是好奇为什么 impi 会发生这种情况以及如何以最安全的方式删除未分配的数组。
最佳答案
how it is possible to delete an unallocated array in the most safe way.
总是初始化你的变量。在这种情况下,使用 nullptr
初始化指针,稍后可以安全地传递给 delete
:
sometype *pointer = nullptr;
if( condition ) {
pointer = new sometype[size];
// dealing with it
}
...
delete [] pointer;
但更好的是使用 std::unique_ptr
或 std::shared_ptr
,它们已正确默认初始化并管理内存。
关于c++ - 使用 impi 库删除未分配内存时的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46733580/