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不能捕捉到对已释放内存的读操作,而是程序直接挂掉.....
发自内心的,感激不尽呀! 展开
展开全部
你可以试试结构化异常检查 seh try。可以拦截程序崩溃。。。但是这个方法治标不治本,而且消耗很多额外的系统资源。。。如果能有更好的方法知道内存失效,防止程序崩溃就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用最新的shared_ptr进行操作即可,share_ptr会在变量生命周期结束时自动释放内存,无须手动delete
详细用法请自行百度
详细用法请自行百度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.步骤类:①整体简介②所需工具/原料③方法/步骤④注意事项
2.常识类:①直接回答问题②详细给出具体原因/理由/介绍
3.原因类:①详细解释原因/理由②提供有效解决方案(构成见步骤类)
4.其他类型详见高质量标准(点击回答框右侧图片)
2.常识类:①直接回答问题②详细给出具体原因/理由/介绍
3.原因类:①详细解释原因/理由②提供有效解决方案(构成见步骤类)
4.其他类型详见高质量标准(点击回答框右侧图片)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道·不知道·不知道·不知道·
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询