Dangling Pointer in C Programming Language

Rumman Ansari   Software Engineer   2019-03-31   9253 Share
☰ Table of Contents

Table of Content:


Dangling Pointer 

  • Dangling pointers arise when an object is deleted or de-allocated, without modifying the value of the pointer, so that the pointer still points to the memory location of the de-allocated memory.
  • In short, a pointer pointing to a non-existing memory location is called a dangling pointer.

Examples of Dangling Pointer

There are different ways where Pointer acts as a dangling pointer.

Way 1: Using free or de-allocating memory

#include
{
    char *ptr = malloc(Constant_Value);
    .......
    .......
    .......
    free (ptr);      /* ptr now becomes a dangling pointer */
}

We have declared the character pointer in the first step. After the execution of some statements, we have the de-allocated memory which is allocated previously for the pointer.

As soon as memory is de-allocated for a pointer, the pointer becomes a dangling pointer

Way 2: Out of Scope

#include
void main()
 {
   char *ptr = NULL;
   .....
   .....
   {
       char ch;
       ptr = &ch;
   } 
   .....   /* dp is now a dangling pointer */
}
  • Character Pointer is Declared in the first Step.
  • Pointer Variable ‘ptr’ is pointing to Character Variable ‘ch’ declared in the inner block.
  • As character variable is non-visible in Outer Block, then Pointer is Still Pointing to Same Invalid memory location in Outer block, then Pointer becomes “Dangling”.

Example: De-allocation of memory



// Deallocating a memory pointed by ptr causes
// dangling pointer
#include <stdlib.h>
#include <stdio.h>
int main()
{
    int *ptr = (int *)malloc(sizeof(int));
 
    // After below free call, ptr becomes a 
    // dangling pointer
    free(ptr); 
     
    // No more a dangling pointer
    ptr = NULL;
}


Dangling pointer: A pointer pointing to a memory location that has been deleted (or freed) is called dangling pointer. There are three different ways where Pointer acts as dangling pointer