社区
C++ 语言
帖子详情
new,delete
botebote419
2010-11-20 07:35:10
int main()
{
int i = 10,j = 5;
int *ptr = new int(i);
delete ptr;
*ptr = j;
return 0;
}
请问下为什么delete后的ptr还能继续被赋值啊,我对着方面不是很了解,请各位能详细讲解下吗,在线等
...全文
76
11
打赏
收藏
new,delete
int main() { int i = 10,j = 5; int *ptr = new int(i); delete ptr; *ptr = j; return 0; } 请问下为什么delete后的ptr还能继续被赋值啊,我对着方面不是很了解,请各位能详细讲解下吗,在线等
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
botebote419
2010-11-20
打赏
举报
回复
回9楼,靠,真搞错了,多谢各位回答了
botebote419
2010-11-20
打赏
举报
回复
还有没有对我上面的问题能解答下的,谢谢啊
gules
2010-11-20
打赏
举报
回复
[Quote=引用 8 楼 botebote419 的回复:]
回3楼,我在c++primer上看到的代码是
HasPtr& HasPtr::operator=(const HasPtr &rhs)
{
++rhs.ptr-> use;
if(ptr-> use==0)
delete ptr;
ptr = rhs.ptr;……
[/Quote]
呵呵,这是引用计数,你所说的问题何在?(计数为0时原内存释放,然后重新指向合法的新内存,与你所说的情况一样吗?你的是没改变指向,这里是指向另一个合法的地方,别搞混罗!)
botebote419
2010-11-20
打赏
举报
回复
回3楼,我在c++primer上看到的代码是
HasPtr& HasPtr::operator=(const HasPtr &rhs)
{
++rhs.ptr->use;
if(ptr->use==0)
delete ptr;
ptr = rhs.ptr;
val = rhs.val;
.
.
.
}
如果按3楼所说,这个代码不是有问题吗
luciferisnotsatan
2010-11-20
打赏
举报
回复
delete释放指针指向的内存,而delete之后,指针还是指向那个空间。但那个空间现在是干什么用的就不知道了,这样很危险。所以要把指针指向NULL
無_1024
2010-11-20
打赏
举报
回复
delete 释放的是指向的对象 而不是释放指针的 释放以后ptr是一个野指针 一般要将其置为空 也就是赋值为NULL 这样就是避免野指针的存在
ruben5288
2010-11-20
打赏
举报
回复
delete只是释放了之前指针的内存,而这个指针则还是存在,只不过后面这个赋值已经是占用了非法内存了!
qq120848369
2010-11-20
打赏
举报
回复
指针变量存的地址还是原来的地址,只是地址上的东西已经不是那个东西.
gules
2010-11-20
打赏
举报
回复
为什么delete后的ptr还能继续被赋值啊?
-----------------------------------
指针指向没有改变,当然能赋值(与正常使用是一样的),只不过赋值写入的内存不再是程序中合法的内存(这种行为将是未定义的,也就是说什么事情都可能发生,无法预测),应当避免!
失落的凡凡
2010-11-20
打赏
举报
回复
delete ptr是释放ptr这个指针指向那个对象,而ptr是个指针,是个自动变量,delete不会销毁指针本身。
Csuxiaowu
2010-11-20
打赏
举报
回复
delete 之后 最好 使其 = NULL
C++第3课:C++内存泄露检测原理及案例实战
本课程具体的内容主要包括C++内存泄露案例、VS2015内存泄露检测、野指针、VirtualAlloc/HeapAlloc/malloc/
new
的区别、C++堆和栈的内存管理、栈...内存泄露检测方式之重载
new
和
delete
、C++内存泄露检测方式之智能指针等...
new
delete
new
[]和
delete
[]的面试总结和底层实现的介绍
1.
new
delete
总结 分配 释放 类别 可否重载 malloc() free() C函数 不可
new
delete
C++表达式 不可 ::operator
new
() ::operator
delete
() C++函数 可 allocator<...
【C++】
new
delete
、
new
[]
delete
[] 详解
C++ 中,
new
、
delete
和 sizeof 一样,都不是函数,都是操作符。面试经常回问 malloc/free 和
new
/
delete
的区别和联系: malloc/free 只是动态分配内存空间/释放空间,
new
/
delete
除了分配空间还会调用构造函数...
new
delete
详解
常规的
new
和
delete
当需要内存时,可以使用
new
申请内存,但在用完内存时应当使用
delete
去归还内存,以防止内存泄漏,具体使用方案见下面代码: int* ps =
new
int ; // 使用
new
申明变量空间 ... ...
delete
...
C++
new
delete
new
[]
delete
[]重载实现
C++
new
delete
new
[]
delete
[]重载实现
C++ 语言
64,682
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章