65,189
社区成员




#include <iostream>
using namespace std;
int main()
{
//常规测试
double * p3 = new double [3];
p3[0] = 0.2;
p3[1] = 0.5;
p3[2] = 0.8;
cout<<"p3[0] = " <<p3[0] <<endl;
cout<<"p3[1] = " <<p3[1] <<endl;
cout<<"p3[2] = " <<p3[2] <<endl <<endl;
//指针加减测试
p3 += 1;
cout<<"p3[0] = " <<p3[0] <<endl;
cout<<"p3[1] = " <<p3[1] <<endl;
//释放动态数组
delete [] p3;
return 0;
}
请看“p3 +=1”和“delete [] p3”,这两条语句不能并存,并存的话编译是能通过,但是运行的时候,就“咚”的一声。//指针加减测试
double * p4 = p3;
p4 += 1;
cout<<"p3[0] = " <<p4[0] <<endl;
cout<<"p3[1] = " <<p4[1] <<endl;
//释放动态数组
delete [] p3;
这么写代码有问题吗?delete [] (p3 - 3);
如果我偏移好多位还是这种好。delete [] --p3;
//释放动态数组
p3 -= 1;
delete [] p3;
如果我在释放前还原“p3”地址就可以正确释放而不用注释掉“p3 += 1;