数组删除错误(c ++)

时间:2017-10-03 12:51:21

标签: c++ main iostream void

我正在制作2个阵列" a"和" b" ..然后我做" b = a"之后"删除[] b"但我得到错误......为什么?我没有线索...帮助我们,这是一个非常小的代码,没有什么特别的...它应该删除一个但它没有或我不知道的东西..

#include <iostream>
using namespace std;

void main()
      {
            int a[5] = {1, 2, 3, 4, 5};
            int *b = new int[3];
            b = a;
            delete[] b;
            cin.get();
       } 

3 个答案:

答案 0 :(得分:1)

new[] - ed不是您传递给delete[]的内容。拥有b = a后,b指针不再指向第一个(原始)数组元素。你需要传入原始指针:

int* b = new int[3];
int* originalb = b;
// your other code in here
delete[] originalb;

据说不要将动态分配的b分配给a

答案 1 :(得分:1)

对于初学者jug不是数组。这是一个指针。在此声明之后

b
发生了两件事。第一个是动态分配的数组的地址

b = a;

失去了。

第二个是指针int *b = new int[3]; 现在指向未使用运算符b动态分配的数组a的第一个元素。因此,在这种情况下,您可能不会将运算符new应用于指针delete

我认为您的意思是将数组b的元素复制到指针a指向的动态分配数组中。

在这种情况下,而不是声明

b

你应该写

b = a;

请记住,根据C ++标准,没有参数的函数#include <algorithm> //... std::copy( a, a + 3, b ); //... delete [] b; 应声明为

main

这是一个示范程序。

int main()

答案 2 :(得分:0)

当你执行b = a时,这意味着名为b的指针指向a的内容,该内容分配在堆栈上。 当您尝试删除它时,它显然会失败。