2 me3072685 me3072685 于 2016.04.17 13:22 提问

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

图片说明

2个回答

boostc
boostc   2016.04.17 14:24
已采纳
  1. delete[] ps,是释放了ps指向的内存,但是并没有擦除原内存中的数据,所以在该内存未被写入其他数据之前,还能输出ps;
  2. cout<<&p,输出的并非指针(动态申请的地址),而是局部变量p的地址,所以不变(输出的栈地址)
me3072685
me3072685 非常感谢!
一年多之前 回复
qq423399099
qq423399099   Ds   Rxr 2016.04.17 19:29

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

me3072685
me3072685 太感谢了!
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!