复制和删除带有数组的指针 在C++中用元素复制一个指针到另一个元素,并在'./HSC.exe中获得“错误”:双自由或损坏(.PREV):0x000 000 000 AADCcc0** 中止(内核转储)”

复制和删除带有数组的指针 在C++中用元素复制一个指针到另一个元素,并在'./HSC.exe中获得“错误”:双自由或损坏(.PREV):0x000 000 000 AADCcc0** 中止(内核转储)”,c++,pointers,copying,C++,Pointers,Copying,我试着调试它,但我被困在了“delete[]rods”这行,因为我不能删除rods,因为我也在删除与“temp”相关的信息 下面是代码的以下部分 int * rods; // Defining rods and temp int * temp; int N_r =5; rods = new int[N_r]; temp = new int[N_r]; for (int i = 0; i < N_r; i++){ // Copying rods to temp temp[i] =

我试着调试它,但我被困在了“delete[]rods”这行,因为我不能删除rods,因为我也在删除与“temp”相关的信息

下面是代码的以下部分

int * rods; // Defining rods and temp
int * temp;
int N_r =5;

rods = new int[N_r];
temp = new int[N_r];
for (int i = 0; i < N_r; i++){ // Copying rods to temp 
    temp[i] = rods[i];
}
delete[] rods; // deleting rods
rods = NULL;
rods = new int[N_r]; // creating new rods 
for (int i = 0; i < N_r; i++){ // copying temp to rods
    rods[i] = temp[i];
}
delete[] temp; // delete temp
temp = NULL;
int*rods;//定义棒和温度
内部*温度;
int N_r=5;
杆=新的int[N_r];
温度=新的整数[N_r];
对于(int i=0;i
双重免费或损坏错误:

这可能是由于浅拷贝造成的。您应该使用重载=运算符

rods[i]= temp[i];

可能会导致这种情况,并且两个对象的数据成员都指向同一位置,当您从这两个对象调用delete时,将释放分配的内存两次。请参阅关于复制构造函数和重载=运算符。

您是否特别使用了任何编程语言?您应该生成一个简单的示例,该示例可以独立编译并再现问题。也就是说,使用本机数组、原始指针、new、copy和delete的方式几乎肯定会带来麻烦。这根本不安全。温度[i]=棒[i];有可能是浅拷贝,因此可能会释放内存两次,因为此代码是正确的。编译器是什么?这有帮助吗?