Xcode9.3编译的程序崩溃在不正确的delete调用

最近在做一个iOS应用,我们C++开发组发布了一个图形库,之前用Xcode9.2发布过,一切正常。之后Xcode升级到了9.3,修改了一些bug后,又重新发布了一版,结果一运行就闪退。看到这个结果立马心里一惊,心想也没改什么东西,只改了一些无关痛痒的地方,而且在其他的平台都发布过也没有什么问题啊,我觉得应该是Xcode升级所致,但升都升了,想降也不容易,只好硬着头皮调试,发现程序总是在一处析构函数调用的地方提示:


我一看这也不是什么错误,这不是断点嘛,但我也没有打断点,想继续向下调试,却始终卡在这个地方,仔细检查了一下对象,也没有发现问题,之后经过一番周折,终于发现的问题的根源:原来那个对象会产生内存泄漏,其实就是

class Base
{
public:
    Base() {}
    ~Base() {}
    //...
};


class Derive : public Base
{
public:
    Derive() {}
    ~Derive() {}
    //...
};


Base* f()
{
    //...
    return new Derive();
}


void g()
{
    auto p = f();
    
    //...
    delete p;

}

基类的析构函数不是虚函数,结果在程序中直接delete基类对象指针,该指针所指向的对象实际是派生类对象,因此会产生内存泄漏,升级到Xcode9.3之后,居然连这样的问题也在运行时报错了,真是应该庆幸啊! 虽然错误提示很奇怪,不过找到了问题的原因,还是很开心,内存泄漏无处不在!程序员要小心啊!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值