社区
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还能继续被赋值啊,我对着方面不是很了解,请各位能详细讲解下吗,在线等
...全文
103
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++ 中的
new
/
delete
和
new
[]/
delete
[]
在 C++ 中,你也许经常使用
new
和
delete
来动态申请和释放内存,但你可曾想过以下问题呢?
new
和
delete
是函数吗?
new
[] 和
delete
[] 又是什么?什么时候用它们?你知道 operator
new
和 operator
delete
吗?为什么
new
[] 出来的数组有时可以用
delete
释放有时又不行?… 如果你对这些问题都有疑问的话,
new
/
delete
详解
new
和
delete
是 C++ 用于管理
堆内存
的两个运算符,对应于C语言中的 malloc 和 free,但是malloc和free是函数,
new
和
delete
是运算符。
delete
释放
new
[] 以及
delete
[]释放
new
的问题
在同花顺的笔试过程中遇到这么一个问题: A* ptr =
new
A[10]; for(int i = 0;i < n;i++){
delete
&ptr[i]; }
【C++】 深入探究
new
和
delete
在C++中,我们应该经常会用到
new
、
delete
,它们是C++的一个关键字,同时也是一个操作符,下面我将我对这两者的了解和学习做一个总结和探讨。
new
和
delete
的全过程首先我们定义一个对象A: struct A { size_t h; };当我们使用关键字
new
在堆上动态创建一个对象A时,比如 A* p =
new
A(),它实际上做了三件事: 向堆上申请一块内存
C++
new
和
delete
的讲解
概述 运算符
new
和
delete
看起来很简单,但是它们也有不少的知识点。对于
new
来说就有
new
operator、operator
new
、placement
new
和
new
operator[]等。对于
delete
也有
delete
operator、poerator
delete
、
delete
operator[] 等。下面就进行按个整理。 1、
new
operator 平...
C++ 语言
65,212
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章