gpt4 book ai didi

c++ - 指针被释放

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:55:27 26 4
gpt4 key购买 nike

我不明白下面的代码有什么问题。它会生成“正在释放的指针未分配”错误。

#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 也可以。我做错了什么 ?

最佳答案

问题是 isPrime您在对 changeArray() 的调用之外定义的指针未被 changeArray() 改变.它的值被复制到调用中,释放数组,但新分配的数组指针仅存储在这个临时变量中,该变量在离开函数时被销毁。通话后,isPrime main() 中的指针仍然指向调用前的相同位置,因此 delete[]main()尝试释放已经释放的内存。

要自己观察,打印 isPrime 的值在调用 changeArray() 之前和之后,以及新分配的值 isPrime里面changeArray() .

解决方案是通过isPrime通过引用:

void changeArray(bool*& isPrime){  
delete[] isPrime;
isPrime = new bool[10];
}

关于c++ - 指针被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14053591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com