#include <iostream>
using namespace std;
class base
{
public:
int i = 99;
virtual ~base(){}
};
class derv: public base
{
public:
void f() { cout << "derv is called" << i << endl;}
};
int main() {
base* p = new base();
derv *d1 = dynamic_cast<derv*>(p);
if(d1 == nullptr)
{
std::cout << "nullptr\n";
}
// Since p point to base , so d1 should return nullptr
//calling any function using d1, should fail/crash
//but why the following line is working ??
d1->f();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjbGFzcyBiYXNlIAp7CiBwdWJsaWM6CiAgaW50IGkgPSA5OTsKICB2aXJ0dWFsIH5iYXNlKCl7fQp9OwpjbGFzcyBkZXJ2OiBwdWJsaWMgYmFzZSAKewogcHVibGljOgogICB2b2lkIGYoKSB7IGNvdXQgPDwgImRlcnYgaXMgY2FsbGVkIiA8PCBpIDw8IGVuZGw7fQp9OwppbnQgbWFpbigpIHsKICBiYXNlKiBwID0gbmV3IGJhc2UoKTsKICBkZXJ2ICpkMSA9IGR5bmFtaWNfY2FzdDxkZXJ2Kj4ocCk7CiAgaWYoZDEgPT0gbnVsbHB0cikKICB7CiAgCXN0ZDo6Y291dCA8PCAibnVsbHB0clxuIjsKICB9CgogLy8gU2luY2UgcCBwb2ludCB0byBiYXNlICwgc28gZDEgc2hvdWxkIHJldHVybiBudWxscHRyIAogLy9jYWxsaW5nIGFueSBmdW5jdGlvbiB1c2luZyBkMSwgc2hvdWxkIGZhaWwvY3Jhc2ggCiAvL2J1dCB3aHkgdGhlIGZvbGxvd2luZyBsaW5lIGlzIHdvcmtpbmcgPz8gCgogZDEtPmYoKTsKfQ==