Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing a function through a pointer after setting the pointer to null [duplicate]

Tags:

c++

I do not understand how the below piece of code yields the given output.

#include <iostream>
using namespace std;

class MyClass
{
   public: 
   void doSomething()
   { 
       cout<<"Inside doSomething"<<endl;  
   }
};

int main()
{   
    MyClass obj;
    MyClass *ptr=&obj;
    ptr->doSomething();
    ptr=NULL;
    ptr->doSomething();
}

Output


Inside doSomething
Inside doSomething

I executed a function with a null pointer and it actually calls the function. Retrieving the address stored in the ptr using cout of ptr shows that ptr is set to 0 after the statement ptr=NULL; .But it still calls doSomething().What is actually happening inside ?

like image 424
Abhilash anand Avatar asked Dec 18 '22 19:12

Abhilash anand


1 Answers

This is Undefined Behaviour, and absolutely anything could happen, including appearing to work. This is not reliable!!

In this case, it doesn't crash, simply because the MyClass::doSomething() function doesn't do anything with its this pointer (which would be NULL, so likely to cause a crash).

If you gave MyClass a member, and attempted to access that in doSomething(), I'd expect to see a crash (segfault):

class MyClass
{
   int someNum;
   public: 
   void doSomething()
   { 
       cout<< "Inside doSomething: " << this->someNum <<endl;  
   }
};

(And in my test with gcc 4.9.2. on Linux, I do indeed see a segfault.)


Also, please reconsider your use of bad practices using namespace std; and endl.

like image 135
BoBTFish Avatar answered Dec 24 '22 03:12

BoBTFish