【问题标题】:Bug when deleting non-allocated memory with an impi library使用 impi 库删除未分配内存时的错误
【发布时间】:2018-03-25 19:21:06
【问题描述】:

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

我在使用不同的 MPI 库和 C++ 编译器的这段代码(基于 C++ MPI+OpenMP)方面从未出现任何错误,除非我开始使用 impi 库。

代码运行正常,直到它到达末尾,然后抛出消息“错误终止您的应用程序之一”,退出代码为 6 或 11。

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

【问题讨论】:

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


【解决方案1】:

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

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

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

但最好使用std::unique_ptrstd::shared_ptr,它们已正确默认初始化并管理内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多