#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();
}
答案 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的内容,该内容分配在堆栈上。 当您尝试删除它时,它显然会失败。