On code blocks(C++)
#include
using namespace std;
int main(){
int *p;
cout<<*p;
}
produces garbage value
In the first code as we are not setting the pointer it is taking random value address... Which may have some garbage value. But in second case pointer is not pointing to any address so obviously it will fail
Your first example,
int *p;
cout << *p;
is taking a wild pointer and attempting to dereference it. What's at the other end of that pointer? Is it a system location that will cause a run time error? Is it the address of x
, another variable in your program? Is it a piece of memory your web browser is using? Attempting to dereference and read or write to this location is undefined behavior, there's no guarantee of what will happen (time travel has been reported in extreme instances).
Dereferencing a null pointer (a pointer to the 0
address) however, is also undefined, but will likely result in a segmentation fault--a run time error.
Your expectation of a runtime error is flawed.
Dereferencing an uninitialised/invalid pointer with arbitrary value can do anything at all.
That means the potential symptoms range from:
and so on.
This is true for dereferencing NULL, too, but modern commodity hardware tends to treat NULL dereferences specially, usually guaranteeing a segmentation fault to aid in diagnostics. Obviously, a CPU cannot do that for arbitrary pointer values, because they may be valid as far as it knows!