为了账号安全,请及时绑定邮箱和手机立即绑定

我用p++移动地址后,按理说在两个for循环中,p应该已经回到原来的地址了,为什么我在delete[]p前面还要加一个p++才能不报错

int main(void)

{    Coordinate*p=new Coordinate[1];

 for (int i=0;i<2;i++) p-="">SetXY(2*i+1,2*(i+1));  

  p++; } 

 for(int i = 0; i < 2; i++) 

 {   p--;  p->printInfo(); }

 p++;

 delete[] p;

 p=NULL;

 system("pause"); return 0; }

请问下我为什么最后要p++才不报错,按理说我在上一个循环中p应该回到原来申请的那个地址了啊?

正在回答

2 回答

把Coordinate*p=new Coordinate[1];改成Coordinate*p=new Coordinate[3];

0 回复 有任何疑惑可以回复我~
#1

lqy55443286044 提问者

非常感谢!
2016-06-30 回复 有任何疑惑可以回复我~

上面有点问题,原函数是这样的,就是最后为什么还要在delete前面加个p++才不报错

void Coordinate::SetXY(int x,int y)

{

m_iX=x;

m_iY=y;

}

void Coordinate::printInfo()

{

    cout<<GetX()<<","<<GetY()<<endl;

}

int main(void)

{    Coordinate*p=new Coordinate[1];

 for (int i=0;i<2;i++) 

{  p->SetXY(2*i+1,2*(i+1));  

  p++; } 

 for(int i = 0; i < 2; i++) 

 {   p--; 

 p->printInfo(); }

 p++;

 delete[] p;

 p=NULL;

 system("pause"); 

return 0; }


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70919    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

我用p++移动地址后,按理说在两个for循环中,p应该已经回到原来的地址了,为什么我在delete[]p前面还要加一个p++才能不报错

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信