C++ 中delete究竟在做什么???
答案:5 悬赏:50 手机版
解决时间 2021-04-28 01:19
- 提问者网友:回忆在搜索
- 2021-04-27 16:15
C++ 中delete究竟在做什么???
最佳答案
- 五星知识达人网友:山有枢
- 2021-04-27 17:06
delete p;
cout << "释放后"< cout <<"p的指向"<< p < cout <<"p所指向空间的大小"<<*p < * p = 9;
p被delete 后,p的值不会改变,还是原来的值,但不能再使用p指向的内存了,你的程序刚好在这里没有出错,但这时p指向的这块内存已经不属于你的程序的内存,如果其它的程序申请内存时也申请到了这块内存,你再对p的内存进行操作是危险的,因为你在改变其他程序的内存值。
cout << "释放后"<
p被delete 后,p的值不会改变,还是原来的值,但不能再使用p指向的内存了,你的程序刚好在这里没有出错,但这时p指向的这块内存已经不属于你的程序的内存,如果其它的程序申请内存时也申请到了这块内存,你再对p的内存进行操作是危险的,因为你在改变其他程序的内存值。
全部回答
- 1楼网友:风格不统一
- 2021-04-27 20:01
其实你的测试也说明了问题不是么,DELETE一个指针,这个指针变量本身并没有变化,但是它指向的内容会被清空,这时这个指针指向一个无意义的区域,直到它再度被赋值,所以DELETE只是一个堆空间的释放。
- 2楼网友:玩家
- 2021-04-27 19:00
delete只是删除p初始的时候new出来的那一块内存区域.并不会把指针p删除,也不会把指针p所指向的地址删除,delete后需要把p=NULL,否则有可能指向一块被回收的内存,下次再次使用p的时候造成崩溃.
#include
void main()
{ int * p = new int ;
* p= 7;
cout <<"p的指向"<< p < cout <<"p所指向空间的大小"<< *p < delete p;
cout << "释放后"< cout <<"p的指向"<< p < cout <<"p所指向空间的大小"<<*p < * p = 9;
cout <<"p的指向"<< p < cout <<"p所指向空间的大小"<<*p < * p = 9;
int a =9;
p = &a;
cout <<"p的指向"<< p < cout <<"p所指向空间的大小"<<*p < }
#include
void main()
{ int * p = new int ;
* p= 7;
cout <<"p的指向"<< p <
cout << "释放后"<
cout <<"p的指向"<< p <
int a =9;
p = &a;
cout <<"p的指向"<< p <
- 3楼网友:执傲
- 2021-04-27 17:25
指针delete是删除指针指向
但是 对于指针的使用 在delete之后 必须要赋值NULL
不然会形成野指针 造成程序崩溃
切记!!
但是 对于指针的使用 在delete之后 必须要赋值NULL
不然会形成野指针 造成程序崩溃
切记!!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯