Dlaczego mogę wywołać funkcję używając niepoprawnego wskaźnika klasy

W poniższym fragmencie kodu, mimo że wskaźnik nie został zainicjowany, połączenie jest nadal pomyślnie nawiązywane

temp *ptr;
ptr->func2();

Czy jest to spowodowane właściwością języka C ++, czy kompilatorem VC ++ 6, który jest nieczysty?

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;
}

questionAnswers(6)

yourAnswerToTheQuestion