NULL Pointer Dereference

D

Denis Palmeiro

Hello eveyone.

What exactly is a NULL Pointer Dereference? I tried searching google but
the only results that returned were bug reports. Some example code, if
possible, would also be appreciated.

Thanks in advance.
 
J

Jun Woong

Denis Palmeiro said:
Hello eveyone.

What exactly is a NULL Pointer Dereference? I tried searching google but
the only results that returned were bug reports. Some example code, if
possible, would also be appreciated.

int *p = 0;
*p; // dereferencing a null pointer
 
S

sumit.sharma

Yes, that's how we dereferenc pointer. Dereferencing them, yields tha
actual data they point to.

Generally, NULL is considered to be a error condition. Like the
pointer is not pointing anywhere.

To declare NULL pointer use,

int * intPtr = (int *) NULL; /* NULL is defined as 0 */

Dereferncing NULL pointer may cause illegal operation...I am not sure

sumit
 
R

Robert W Hand

Yes, that's how we dereferenc pointer. Dereferencing them, yields tha
actual data they point to.

Generally, NULL is considered to be a error condition. Like the
pointer is not pointing anywhere.

To declare NULL pointer use,

int * intPtr = (int *) NULL; /* NULL is defined as 0 */

Dereferncing NULL pointer may cause illegal operation...I am not sure

sumit

Please do not top post. I actually thought that Jun's post was a
correct answer. Your post has some odd constructions. For example,
you do not need to cast NULL explicitly.

NULL is a macro defined in stddef.h. to be the null pointer constant.
A null pointer constant is an integer constant expression with the
value 0 or such an expression casted to void*. A null pointer
constant converted to a pointer type is called a null pointer.

#include <stddef.h>

int* ip = NULL;
*ip; // undefined behavior

would be sufficient. The problem with derefencing a null pointer is
that it invokes undefined behavior. It is impossible to know how any
particular implementation will handle it.

Best wishes,

Bob
 
P

prashna

If the pointer is not initialised expicitly, does'nt it get
initialised to NULL by default.I have written the following program
which shows that by default any pointer will be intialised to
NULL.Have a look at the program.

#include <stdio.h>

int main()
{
int *p;
if (p ==NULL)
printf("pointer is null %p\n",p);
else
printf("pointer is not null\n");

}

and here is the output,
$ cc dereference_null.c
$ ./a.out
pointer is null 0

or does it depends on the system that is being used?I executed this
program on AIX.
 
M

Mr. 4X

Denis Palmeiro said:
Hello eveyone.

What exactly is a NULL Pointer Dereference? I tried searching google but
the only results that returned were bug reports.

No wonder - dereferencing a NULL po9inter *is* usually a bug. If you try to
READ the stuff to which the null pointer points then you may get away with
garbage values, but protected mode OSes will stop the program ('segfault').
If you WRITE to it, then either the OS catches the attempt, or you have
good chances of locking up the machine.
 
M

Micah Cowan

If the pointer is not initialised expicitly, does'nt it get
initialised to NULL by default.

NO. The only time this will happen without an explicit initializer is
when it is statically allocated.
I have written the following program
which shows that by default any pointer will be intialised to
NULL.Have a look at the program.

#include <stdio.h>

int main()
{
int *p;
if (p ==NULL)
printf("pointer is null %p\n",p);
else
printf("pointer is not null\n");

}

and here is the output,
$ cc dereference_null.c
$ ./a.out
pointer is null 0

or does it depends on the system that is being used?I executed this
program on AIX.

You were simply unlucky.

-Micah
 
S

sumit.sharma

Hi,

I know that NULL is defined as 0. But there are chances that compiler
may generate warnings (invalid pointer assignments) when you do this
--

int * iPtr = NULL; /* maybe illegal */

So to be on SAFE side, I had typecasted it to int *, so to avoid
any compiler warnings...if it is INTELLIGENT.

So you are just complementing my answer abt de referencing NULL
pointer :):)
 
B

Ben Pfaff

I know that NULL is defined as 0.

It may also be defined as ((void *) 0) or other variations as
well.
But there are chances that compiler may generate warnings
(invalid pointer assignments) when you do this --

int * iPtr = NULL; /* maybe illegal */

That's not ever illegal (and not invalid unless you failed to
define NULL by including an appropriate header). It is perfectly
fine as specified by the language definition.
So to be on SAFE side, I had typecasted it to int *, so to avoid
any compiler warnings...if it is INTELLIGENT.

I'd be very surprised to have a compiler complain about the
above, but compilers are allowed to warn about anything.
 
M

Mark McIntyre

please don't top post. Your response should go BELOW the text it
relates to.
I know that NULL is defined as 0. But there are chances that compiler
may generate warnings (invalid pointer assignments) when you do this
--

don't put two dashes and a space in the middle of your post. That
separates a sig from the body, and causes all good newsreaders to snip
all the text below. I had to force Agent to include it.
int * iPtr = NULL; /* maybe illegal */

thats never illegal in declaration.
So to be on SAFE side, I had typecasted it to int *,

Thats unnecessary. In C. Are you accidentally compilng in C++ mode?
 
S

Shill

may generate warnings (invalid pointer assignments) when you do this
don't put two dashes and a space in the middle of your post. That
separates a sig from the body, and causes all good newsreaders to snip
all the text below. I had to force Agent to include it.

Hmmm, there was no space after the two hyphens :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top