C++ 如何判断内存地址可用?

感谢您阅读!int*a=newint;//设执行后a=0x12345678int*b=a;//那么b也=0x12345678deletea;a=NULL;//于是,a=0... 感谢您阅读!

int *a=new int;//设执行后a=0x12345678
int *b=a;//那么b也=0x12345678
delete a;
a=NULL;//于是,a=0了,b还=0x12345678

现在,b正在被一个子线程使用。这个线程需要判断b是否已经被释放。
b是一个没有唯一标识的临时变量,不能给b另外设置变量表明其释放状态。
那么,应该怎样判断内存地址b(0x12345678)是否可用呢?

PS:不知道为什么,自己写的try-catch不能捕捉到对已释放内存的读操作,而是程序直接挂掉.....

发自内心的,感激不尽呀!
展开
 我来答
judymac01
推荐于2016-08-06 · 超过15用户采纳过TA的回答
知道答主
回答量:21
采纳率:0%
帮助的人:45.7万
展开全部
大哥,指针是很忌讳这种操作的,本身这样的用法就是有问题的。
比方说当b指向a,但是a这一块内存释放了,这个时候原本为a的内存就有可能是其它程序的数据了,但是b还是记得a的地址,但是里面的东西是不能随便访问的,发生了非法访问。
在这种情况下b和a就是一个东西的啦,除非你自己为b开辟一块内存,不要用这样的软连接方式。
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
勤奋的芋头
2016-05-03
知道答主
回答量:16
采纳率:0%
帮助的人:4.9万
展开全部
int *a=new int;//设执行后a=0x12345678
int *b=a;//那么b也=0x12345678
delete a;
a=NULL;//于是,a=0了,b还=0x12345678

现在,b正在被一个子线程使用。这个线程需要判断b是否已经被释放。
b是一个没有唯一标识的临时变量,不能给b另外设置变量表明其释放状态。比方说当b指向a,但是a这一块内存释放了,这个时候原本为a的内存就有可能是其它程序的数据了,但是b还是记得a的地址,但是里面的东西是不能随便访问的,发生了非法访问。
在这种情况下b和a就是一个东西的啦,除非你自己为b开辟一块内存,不要用这样的软连接方式。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jaickyu
2015-11-01 · 超过29用户采纳过TA的回答
知道答主
回答量:141
采纳率:0%
帮助的人:55.1万
展开全部
大哥,指针是很忌讳这种操作的,本身这样的用法就是有问题的。
比方说当b指向a,但是a这一块内存释放了,这个时候原本为a的内存就有可能是其它程序的数据了,但是b还是记得a的地址,但是里面的东西是不能随便访问的,发生了非法访问。
在这种情况下b和a就是一个东西的啦,除非你自己为b开辟一块内存,不要用这样的软连接方式。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寒笙丶XZ
2016-05-02
知道答主
回答量:42
采纳率:0%
帮助的人:6.5万
展开全部
大哥,指针是很忌讳这种操作的,本身这样的用法就是有问题的。
比方说当b指向a,但是a这一块内存释放了,这个时候原本为a的内存就有可能是其它程序的数据了,但是b还是记得a的地址,但是里面的东西是不能随便访问的,发生了非法访问。
在这种情况下b和a就是一个东西的啦,除非你自己为b开辟一块内存,不要用这样的软连接方式。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4684e1e
2013-05-05 · TA获得超过2309个赞
知道小有建树答主
回答量:1266
采纳率:0%
帮助的人:547万
展开全部
这不是程序有没有问题,这是你编程的问题。指针安全问题一直都是C++/C的首要问题。你这样无疑滥用指针,你得考虑每一个指针的安全性。smartpoint正好能解决这个问题。像STL,BOOST中关于这样的大有篇幅。你可以在debug编译环境中写入错误的处理办法,但这仅限于给用户知道发生了什么错误。但是,内存访问非法的问题不能解决。你可以简单的加上一个bool变量,用来记录a变量的可用性。在你对a变量delete的时候,至为flase。使用变量时简单是否可用。指针方面是大问题,绝对不能像你这样用。我的方法也并非完美,这只是很烂的一个简单解决办法。百度一下,‘智能指针’。你会对指针有个新认识
追问
写了这么多真是辛苦了,但是问题已经说明了,这个变量是临时的,没有唯一标识,不能另外设置变量。智能指针也不是用来解决问题的办法....所以不能给您推荐答案了....还请见谅....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式