使用delete释放new得到的内存,但是内存并没有得到释放

看,这有一只小强~ 2021-02-06 09:07:01
使用delete释放new得到的内存,但是内存并没有得到释放。
使用的vscode,MinGW32,下面是具体代码:

```
int main(){

int *a = new int(8);
cout<< a << "----" << *a <<endl;
delete a;
cout << a << "----" << *a <<endl;

return 0;
}

```

得到的结果是一样的,非常疑惑,是我哪里弄错了吗,请各位大神解答:
···

0x737258----8
0x737258----8
···
...全文
579 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
翅膀又硬了 2021-02-20
  • 打赏
  • 举报
回复
delete之后就不要再用了,里面的值是什么跟你没关系了
快乐胖电工 2021-02-20
  • 打赏
  • 举报
回复
新手路过学习
ILLLchen 2021-02-20
  • 打赏
  • 举报
回复
举个例子你就明白了 你去酒店开一个房间,开好房间后这个房间是属于你的,但是一旦你退了房间,你就失去了这个房间的使用权,你再去使用就是非法的。 但是房间还是会在的,不会因为你退房而房间消失。 同样的道理,你delete掉后,这块内存的地址还是有的,但是你已经没有权限使用和访问了。
NorZ 2021-02-19
  • 打赏
  • 举报
回复
引用 9 楼 打不垮的小强 的回复:
引用 8 楼 NorZ 的回复:
malloc和free之后内存里的值是多少,这个标准没有规定,所以要看操作系统如何处理了
我这个用的是new和delete,我还以为delete后会把内存里的值删掉,然后赋予一个随机数
new/delete 不过是C++封装的 malloc 和 free,增加了异常处理,重载了[] operator,在内存分配上没有区别
爱晚乏客游 2021-02-19
  • 打赏
  • 举报
回复
应该是vscode的编译器帮你保留了a的地址,我在vs2015里面就报错了。 一般编译器只保留一次,你再打印一次 cout << a << "----" << *a <<endl;试试看?说不定就报错了。
「已注销」 2021-02-08
  • 打赏
  • 举报
回复
举个例子,你买了张火车票,然后你又退票了,这个位置就一定马上卖给其他人了吗?当然没有,虽然你现在还能坐一会儿,但已经不属于你的了。
  • 打赏
  • 举报
回复
非常感谢大家的解答,差不多懂了
xian0-666 2021-02-07
  • 打赏
  • 举报
回复
引用 5 楼 打不垮的小强 的回复:
[quote=引用 2 楼 forever74 的回复:]我是说, 在你手里的时候是一张8块的 到别人手里它还是一张8块的 就这么回事儿。
您好,非常感谢您的解答。是不是没有delete之前,这个地址就不会被分配出去,delete之后,虽然值没有变,但是可以被分配给其他人。这样理解是正确的吗[/quote] delete之后,值不知道是否变化,因为有可能别分配给其他内存使用了,如果这段空间还没有被使用,则值不变
赵4老师 2021-02-07
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
  • 打赏
  • 举报
回复
引用 2 楼 forever74 的回复:
我是说, 在你手里的时候是一张8块的 到别人手里它还是一张8块的 就这么回事儿。
您好,非常感谢您的解答。是不是没有delete之前,这个地址就不会被分配出去,delete之后,虽然值没有变,但是可以被分配给其他人。这样理解是正确的吗
qybao 2021-02-07
  • 打赏
  • 举报
回复
也就是a虽然还指向原来的内存地址,但是a已经没有该地址的使用权了 就好像你把房子卖了,你还可以去你原来房子的地址,但是那个房子已经不属于你了
突触 2021-02-07
  • 打赏
  • 举报
回复
实际上new不会为你的程序真正的创建内存,而是在程序启动时 已经分配好的 一块空间中划分出一段空间,new完后这段划分的空间就会被占有 不会被之后new干扰 delete完后 这段空间就又可以被new划分。
  • 打赏
  • 举报
回复
引用 8 楼 NorZ 的回复:
malloc和free之后内存里的值是多少,这个标准没有规定,所以要看操作系统如何处理了
我这个用的是new和delete,我还以为delete后会把内存里的值删掉,然后赋予一个随机数
NorZ 2021-02-07
  • 打赏
  • 举报
回复
malloc和free之后内存里的值是多少,这个标准没有规定,所以要看操作系统如何处理了
forever74 2021-02-06
  • 打赏
  • 举报
回复
我是说, 在你手里的时候是一张8块的 到别人手里它还是一张8块的 就这么回事儿。
forever74 2021-02-06
  • 打赏
  • 举报
回复
你以为啥叫释放? 你买东西的时候释放了一张钞票, 但是在别人手里的钞票仍然是钞票啊。

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧