智能指针的延迟报错问题

工作中遇到C++复杂代码随机报错,开启ASAN机制定位到报错行,围绕锁排查未发现问题,屏蔽锁访问成员变量仍报错。实验发现指针未赋值时,调用成员函数情况不同。解决方案是调用智能指针成员前先检查指针合法性,根本是找出未赋值原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近工作上发现一个比较复杂的代码出现随机报错问题,话不多说,直接debug模式开启ASAN机制构建程序,

set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -O0 -g -fstack-protector -fsanitize=address -fno-omit-frame-pointer")

很快能定位到报错的行,调用某个对象的成员函数的内部报错,说某个成员锁对象有问题,非法读取内存之类的。然后围绕这个锁,看了相关代码,没发现问题。干脆屏蔽这个锁的访问,发现访问某些成员变量也开始报错了,很奇怪,第一感觉是如果对象本身为空,外部调用的时候就应该报错了阿。

实在是想不通,看了一圈代码,也没发现明显问题,难道是ASAN此时报错较晚?干脆做个实验吧。代码如下:

#include <memory>

class Person {
   
   
public:
  Person(const std::string& name) : name(name) {
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值