为什么这段代码片段包含错误?

Gür*_*tak -9 c++ pointers assignment-operator delete-operator

我通常知道,*和&符号.但我们的老师给了我们一个例子,她说"问题发生在这里"

int *a1;
int *a2 = new int[100];
a1=a2 //What does this line mean???
delete []a2;

k=a1[0]//she said error occurs here.
Run Code Online (Sandbox Code Playgroud)

我无法理解什么是a1 = a2?为什么会出现错误?

Sou*_*osh 5

a1=a2 //What does this line mean???

=赋值运算符.这实际上将LHS操作数的值赋给RHS操作数.

这里,这一行意味着,赋值a2to a1,即,指定a2指针a1.也就是说,a1a2指向相同的内存位置.

现在,一旦你打电话delete[]a1,它实际上释放内存.然后,accssing任一a1[i]a2[i]相同,访问已经自由d存储器,它调用未定义的行为.

为了帮助理解,考虑一杯果汁和两根吸管的比喻.一旦你通过任何一根吸管喝了果汁,你就不能再通过另一根吸汁了.