Я столкнулся с проблемой в сборке выпуска Visual Studio
псевдокод приведен ниже
#include "lib/A/inc/A.h"
main()
{
A a;
a.f1();//this fails in release build and works fine in debug build
a.f2();//this fails in release build and works fine in debug build
}
A получен из B, присутствующего в lib / B / inc / Bh
class A :public B
{
virtual f2();
};
B имеет чисто виртуальную функцию f2 () и обычную функцию f1 ()
class B {
private:
string name;
public:
void f1();
virtual void f2() = 0;
};
Я вступил в функцию f1 ().В этот момент этот указатель B имеет значение 0x0000000, и __vfptr недопустим.
Но в main () объект a действителен, и __vfptr также допустим.Есть идеи, почему это произошло в сборке релиза?