R6025 ---Pure virtual functmm call的错误之一

    今天在调试一个程序,在退出时,突然出现这样的错误:

    “Runtime Error! ....R6025 ---Pure virtual functmm call ”

    捉摸了一会,发生了问题所在。

    我这是一个DLL,是在FreeLibrary里出的错误,而看调用栈是在一个类的析构函数里发生了些错误。

    而这个类的析构函数里调用了一个全局对象,这个全局对象又转换到基类类型再调用纯虚函数(子类实现了此纯虚函数)

    我觉得可能的原因是FreeLibrary了以后全局对象的信息不全了,已找不到和基类的关系,导致出错。


    模型代码如下(纯手工,不一定能运行):

   

interface A
{
    virtual int add(int x,int y) = 0;
}

class B : public A
{
public:
    virtual int add(int x,int y){return x+y;}
}

//获得全局对象
A* get_A(void)
{
    static B b_;
    static pA_* = &b_;
    return pA_;
}

//调用类
class mycaller
{
public:    
    mycaller(){}
    ~mycaller(){get_A()->add(1+2);} //如果FreeLibrary时,这个析构函数才被调用,则会导致R6025的错误发生
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值