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的错误发生
}




你可能感兴趣的:(R6025 ---Pure virtual functmm call的错误之一)