Esempio

class Base {
public:
void fnc();
};


class Derived: public Base {
public:
void fnc(){}
};


void call
DerivedFunction(Base *ptr){

Derived *dp = (Derived*) ptr;
dp->fnc();

}

Soluzione
Non eseguire il casting di un puntatore di una classe al puntatore di una classe non ereditata. Per evitare errori, non utilizzare puntatori per il down casting. Utilizzare invece funzioni virtuali.

class Base {
public:
virtual void fnc();
};


class Derived: public Base {
public:
virtual void fnc(){}
};


void callDerivedFunction
(Base *ptr){

ptr->fnc();

}