Insure++ Reference - READ_NULL
This error is generated whenever an attempt is made to dereference
a NULL pointer.
This code attempts to use a pointer which has not been explicitly
initialized. Since the variable a is global, it is
initialized to zero by default, which results in dereferencing a
NULL pointer in line 10.
1: /*
2: * File: readnull.c
3: */
4: int *a;
5:
6: main()
7: {
8: int b, c;
9:
10: b = *a;
11: }
[readnull.c:10] **READ_NULL**
1. >> b = *a;
2. Reading null pointer: a
Stack trace where the error occurred:
3. main() readnull.c, 10
4. **Memory corrupted. Program may crash!!**
- Source line at which the problem was detected.
- Description of the problem and the expression that is in error.
- Stack trace showing the function call sequence leading to the
error.
- Informational message indicating that a serious error has
occurred which may cause the program to crash.
A common cause of this problem is the one shown in the example - use
of a pointer that has not been assigned and which is initialized to zero.
This is usually due to the omission of an assignment or allocation
statement which would give the pointer a reasonable value.
The example code might, for example, be corrected as follows
1: /*
2: * File: readnull.c (modified)
3: */
4: int *a;
5:
6: main()
7: {
8: int b, c;
9:
10: a = &c;
11: b = *a;
12: }
A second common source of this error is code which dynamically
allocates memory, but then zeroes pointers as blocks are freed. In this
case, the error would indicate reuse of a freed block.
A final common problem is caused when one of the dynamic memory
allocation routines, malloc, calloc , or
realloc , fails and returns a NULL,
pointer. This can happen either because your program passes bad arguments
or simply because it asks for too much memory. A simple way of finding
this problem with Insure++ is to enable the
RETURN_FAILURE
error code via your .psrc file and run the program
again. It will then issue diagnostic messages every time a system call
fails, including the memory allocation routines.
READ_DANGLING
READ_OVERFLOW
|