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不能捕捉到对已释放内存的读操作,而是程序直接挂掉.....
发自内心的,感激不尽呀! 展开
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不能捕捉到对已释放内存的读操作,而是程序直接挂掉.....
发自内心的,感激不尽呀! 展开
10个回答
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
展开全部
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开辟一块内存,不要用这样的软连接方式。
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开辟一块内存,不要用这样的软连接方式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大哥,指针是很忌讳这种操作的,本身这样的用法就是有问题的。
比方说当b指向a,但是a这一块内存释放了,这个时候原本为a的内存就有可能是其它程序的数据了,但是b还是记得a的地址,但是里面的东西是不能随便访问的,发生了非法访问。
在这种情况下b和a就是一个东西的啦,除非你自己为b开辟一块内存,不要用这样的软连接方式。
比方说当b指向a,但是a这一块内存释放了,这个时候原本为a的内存就有可能是其它程序的数据了,但是b还是记得a的地址,但是里面的东西是不能随便访问的,发生了非法访问。
在这种情况下b和a就是一个东西的啦,除非你自己为b开辟一块内存,不要用这样的软连接方式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大哥,指针是很忌讳这种操作的,本身这样的用法就是有问题的。
比方说当b指向a,但是a这一块内存释放了,这个时候原本为a的内存就有可能是其它程序的数据了,但是b还是记得a的地址,但是里面的东西是不能随便访问的,发生了非法访问。
在这种情况下b和a就是一个东西的啦,除非你自己为b开辟一块内存,不要用这样的软连接方式。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
比方说当b指向a,但是a这一块内存释放了,这个时候原本为a的内存就有可能是其它程序的数据了,但是b还是记得a的地址,但是里面的东西是不能随便访问的,发生了非法访问。
在这种情况下b和a就是一个东西的啦,除非你自己为b开辟一块内存,不要用这样的软连接方式。啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这不是程序有没有问题,这是你编程的问题。指针安全问题一直都是C++/C的首要问题。你这样无疑滥用指针,你得考虑每一个指针的安全性。smartpoint正好能解决这个问题。像STL,BOOST中关于这样的大有篇幅。你可以在debug编译环境中写入错误的处理办法,但这仅限于给用户知道发生了什么错误。但是,内存访问非法的问题不能解决。你可以简单的加上一个bool变量,用来记录a变量的可用性。在你对a变量delete的时候,至为flase。使用变量时简单是否可用。指针方面是大问题,绝对不能像你这样用。我的方法也并非完美,这只是很烂的一个简单解决办法。百度一下,‘智能指针’。你会对指针有个新认识
追问
写了这么多真是辛苦了,但是问题已经说明了,这个变量是临时的,没有唯一标识,不能另外设置变量。智能指针也不是用来解决问题的办法....所以不能给您推荐答案了....还请见谅....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询