#include "iostream"
using namespace std;
class A
{
public:
void mprint()
{
cout<<"\n TESTING NULL POINTER";
}
};
int main()
{
A *a = NULL;
a->mprint();
return 0;
}
I am getting output as “TESTING NULL POINTER”. Can anyone please explain why this program is printing the output instead of crashing. I checked it on Dev C++ and aCC compiler both gave same result.
You’re not using any member variables of
A– the function is completely independent of theAinstance, and therefore the generated code happens to not contain anything that dereferences 0. This is still undefined behavior – it just may happen to work on some compilers. Undefined behavior means “anything can happen” – including that the program happens to work as the programmer expected.If you e.g. make
mprintvirtual you may get a crash – or you may not get one if the compiler sees that it doesn’t really need a vtable.If you add a member variable to A and print this, you will get a crash.