【发布时间】:2021-07-30 09:47:12
【问题描述】:
删除ptr后,cout << ptr是否打印int(6)的地址?
如果是这样,为什么会出现乱码?我记得delete只会释放指定空间的数据,不是吗?
还有想问一下delete这里什么时候释放空间数据,是只释放6还是int类型?
int* ptr = new int(6);
cout << "Address of the space pointed to by ptr: " << ptr << endl;
cout <<"the value of the space pointed to by ptr: "<< *ptr << endl;
delete ptr;
cout << ptr << endl;
【问题讨论】:
-
delete 命令仅释放该指针正在使用的内存。所以它只会释放值 6 而不是 int 类型。
-
delete ptr释放ptr指向的内存(创建为new int (6))。它不会更改该指针的值。所以cout << ptr将打印与执行delete ptr之前相同的(指针的)值。如果您在完成delete ptr之后打印*ptr,则行为未定义(这意味着它可以打印值6,它可以打印“垃圾”,但结果也可能是重新格式化您的硬盘驱动器 - 未定义的行为表示任何结果都是可能的)。 -
指针就是一个存储单元的编号。在古老的 K&R C 中,
int和指针之间并没有太大的区别。后来,这被重新定义了,当然,因为混淆指针和值是一个很容易犯的错误,但会产生严重的后果。但是,指针是指针。删除内容(指针指向的位置)是一回事,但它不会改变指针本身。但是,如果您在删除后访问指针的内容 - 那将是未定义的行为。 -
删除
ptr后,如果继续使用会发生什么,还不确定。