L'accès aux membres de la classe sur un pointeur NULL

Je faisais des expériences avec C++ et a trouvé le code ci-dessous que de façon très étrange.

class Foo{
public:
    virtual void say_virtual_hi(){
        std::cout << "Virtual Hi";
    }

    void say_hi()
    {
        std::cout << "Hi";
    }
};

int main(int argc, char** argv)
{
    Foo* foo = 0;
    foo->say_hi(); //works well
    foo->say_virtual_hi(); //will crash the app
    return 0;
}

Je sais que le virtuel appel de méthode se bloque car il nécessite une vtable de recherche et ne peut travailler qu'avec des objets valides.

J'ai les questions suivantes

  1. Comment un non méthode virtuelle say_hi travailler sur un pointeur NULL?
  2. Où l'objet foo sont alloués?

Toutes les pensées?

  • Voir this pour ce que le dit la langue à ce sujet. Les deux sont un comportement indéfini.