I’ve got a couple of questions regarding pointers. First:
ObjectType *p;
p->writeSomething();
Why is it possible to call a method on an object when the pointer hasn’t been initialized? If I run that code I get the output from “writeSomething()” in my console window. Second:
ObjectType *p;
if(p==NULL)
cout<<"Null pointer";//This is printed out
p = new ObjectType;
delete p;
if(p==NULL)
cout<<"Null pointer";
else
cout<<"Pointer is not null";//This is printed out
Why isn’t the pointer null in the second if statement and how do I check if a pointer isn’t pointing to any memory address? I’m also wondering if there is any way to check if some memory hasn’t been released when a program is done executing. For example, if you forget to write 1 delete statement in the code.
The first code is undefined behavior, anything can happen, even appearing to work. It’s probably working because the call is resolved statically, and you’re not accessing any members of the class.
For the second snippet
deletedoesn’t set the pointer toNULL, it just releases the memory. The pointer is now dangling, as it points to memory you no longer own.