¿Por qué puedo realizar una llamada de función utilizando un puntero de clase no válido?

En el siguiente fragmento de código, aunque el puntero no se inicializa, la llamada aún se realiza correctamente.

temp *ptr;
ptr->func2();

¿Es debido a la propiedad del lenguaje C ++, o es el compilador VC ++ 6 el que está jugando mal?

class temp {
public:
    temp():a(9){}
    int& func1()
    {
        return a;
    }
    bool func2(int arg)
    {
        if(arg%2==0)
            return true;
        return false;
    }
    int a;
};

int main(int argc, char **argv)
{
    temp *ptr;
    int a;
    cin>>a;
    if(ptr->func2(a))
    {
        cout<<"Good poniner"<<endl;
    }
    ptr->func1(); // Does not crash here
    int crashere=ptr->func1();// But does crash here 
    return 0;
}

Respuestas a la pregunta(6)

Su respuesta a la pregunta