me3072685
2016-04-17 05:22
采纳率: 100%
浏览 1.4k
已采纳

关于c++在函数中创建指针的两个问题

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • haskellcg 2016-04-17 06:24
    已采纳
    1. delete[] ps,是释放了ps指向的内存,但是并没有擦除原内存中的数据,所以在该内存未被写入其他数据之前,还能输出ps;
    2. cout<<&p,输出的并非指针(动态申请的地址),而是局部变量p的地址,所以不变(输出的栈地址)
    点赞 打赏 评论
  • 小灸舞 2016-04-17 11:29

    第一个问题:
    delete确实已经释放了ps所指向的那块内存,但所谓释放并不是清空,而是把那块内存重新回收到系统中,告诉系统这块内存又可以重新分配了。
    delete的时候,系统只是将指针指向的堆空间回收,但是没有将指针变量的值赋值为null,也就是说指针还是指向原来的堆空间,但是这个空间已经失效。如果继续访问的话将是一个未定义的行为,可能崩也可能不崩
    第二个问题:
    简单地说,就是编译器选择这么做,但标准并不规定如此
    局部变量是分配在栈上,地址是栈指针的一个偏移量。栈就那么大,不可能循环一万次就给分配一万个地址。反正上次循环和下次循环也不冲突,上次用完了下次接着用。

    点赞 打赏 评论

相关推荐 更多相似问题