正在释放指针
Pointer being freed
我不明白下面的代码有什么问题。生成一个"被释放的指针未被分配"错误。
#include "mpi.h"
using namespace std;
void changeArray(bool* isPrime){
delete[] isPrime;
isPrime = new bool[10];
}
int main(int argc, char * argv[])
{
int size, rank;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
bool* isPrime = new bool[1000];
changeArray(isPrime);
delete[] isPrime;
MPI_Finalize();
return 0;
}
但是如果我把函数的代码直接放在main中,它是可以的。如果我不使用MPI也没关系。我做错了什么?
问题是您在调用changeArray()
之外定义的isPrime
指针没有被changeArray()
改变。它的值被复制到调用中,在调用中释放数组,但是新分配的数组指针仅存储在这个临时变量中,该变量在离开函数时被销毁。在调用之后,main()
中的isPrime
指针仍然指向调用前的相同位置,因此main()
中的delete[]
试图释放已经释放的内存。
要自己观察,在调用changeArray()
之前和之后打印isPrime
的值,以及在changeArray()
中新分配的isPrime
的值。
isPrime
:
void changeArray(bool*& isPrime){
delete[] isPrime;
isPrime = new bool[10];
}
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何在向量中释放指针?
- 在C++中释放内存期间,迭代器与指针有何不同
- 包含矢量指针的结构的内存释放问题
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 我是否需要在 c++ 中从本地指针中释放分配的内存?
- 未分配释放C++(C 字符串)指针
- 未分配被释放的指针(将堆栈实现为链表时)
- Unique_ptr:在列表中放置时未分配释放的指针
- 释放 std::vector 中指针内存的最有效方法是什么?
- 使用删除与智能指针释放内存以及释放内存的正确方法
- 类析构函数和指针释放
- 使用指向数组元素的指针释放内存
- 使用指针算术和指向该结构的元素的指针释放该结构
- 类中的指针/释放内存
- 矩阵指针释放问题
- 从不同类型的指针释放内存是否安全