社区
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还能继续被赋值啊,我对着方面不是很了解,请各位能详细讲解下吗,在线等
...全文
80
11
打赏
收藏
new,delete
int main() { int i = 10,j = 5; int *ptr = new int(i); delete ptr; *ptr = j; return 0; } 请问下为什么delete后的ptr还能继续被赋值啊,我对着方面不是很了解,请各位能详细讲解下吗,在线等
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
new
delete
new
[]和
delete
[]的面试总结和底层实现的介绍
1.
new
delete
总结 分配 释放 类别 可否重载 malloc() free() C函数 不可
new
delete
C++表达式 不可 ::operator
new
() ::operator
delete
() C++函数 可 allocator<T>::allocate() allocator<T>::deallocate() C++ 标准库 可自由设计并搭配任何容器
【C++】
new
delete
、
new
[]
delete
[] 详解
C++ 中,
new
、
delete
和 sizeof 一样,都不是函数,都是操作符。面试经常回问 malloc/free 和
new
/
delete
的区别和联系: malloc/free 只是动态分配内存空间/释放空间,
new
/
delete
除了分配空间还会调用构造函数和析构函数进行初始化与清理 它们都是动态管理内存的入口 malloc/free 是 C/C++ 标准库的函数,
new
/delet...
malloc、free和
new
delete
的区别
new
和
delete
: 可以重载自定义的
new
和
delete
操作符来实现特定的内存分配行为。
new
delete
以及结构体的综合应用
关于
new
和
delete
的操作 1. ->运算符叫做“指向结构体成员运算符”,是C语言和C++语言的一个运算符,用处是使用一个指向结构体或对象的指针访问其内成员。 2.
new
delete
的使用(仅限于c++,注意,
new
、
delete
不是函数而是操作符!注意与c中的malloc和free区分)编程的时候经常要用到堆内存的分配,通常使用的操作符是
new
,这
malloc free和
new
delete
的区别
malloc和free是c语言中的库函数,使用时需要用到指定的头文件
,
new
和
delete
是c++里面的操作符,不需要依赖头文件,但是需要编译器支持。它们有一定的共同点,它们的共同特征就是用来分配内存和释放内存,它们也存在着一定的差异,我们就主要来说求他们之间的差异。
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章