Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Uninitialized pointers in code

I am learning C++ and I came to know that pointers if left uninitialized could point to random locations in memory and create problems that memory might be used by some other program.

Now if that is the case we should never have this line in any part of our code:

int* ptr; 

Instead we should have something like

int* ptr = NULL; //Is this going to avoid the problem 

Please suggest because I have seen the first line(int* ptr;) in many books so I am getting this doubt. If possible give some examples also.

like image 619
munish Avatar asked May 03 '11 13:05

munish


2 Answers

int* ptr = NULL; //Is this going to avoid the problem 

This will cause ptr to point to NULL which you can explicitly check for as a default/uninitialized value. It prevents the problem you describe, but a careless programmer can still accidentally dereference a null pointer without checking, causing undefined behaviour.

The main advantage is your convenience for checking whether the ptr has or has not been initialized to anything, ie:

 if (ptr != NULL)  {      // assume it points to something  } 

Since this is pretty idiomatic, its pretty dangerous to not initialize the pointer to NULL. The pointer would be initialized to a non-NULL garbage value that doesn't really point to anything real. Worst of all, the check above would pass, causing even worse problems if it just so happens that the address in the pointer is memory you can legally access. In some Embedded environments, you might be able to access any part of memory, so you might accidentally corrupt random parts of memory or random parts of your executing code.

like image 80
Doug T. Avatar answered Oct 15 '22 05:10

Doug T.


Always initialize your variables.

Occasionally, you may want to initialize to NULL, but most of the time, you should be able to initialize the pointer to the value it is supposed to hold. Declare variables as late as possible, and initialize them at that point, not 15 lines further down in your code.

like image 28
jalf Avatar answered Oct 15 '22 04:10

jalf