DEV Community

Cover image for Wild and Dangling Pointers in C
João Godinho
João Godinho

Posted on

Wild and Dangling Pointers in C

  • Dangling Pointer: A pointer that still holds an address, but the memory it points to is no longer valid (stack variable out of scope or freed heap memory). Accessing it is undefined behavior.
  • Wild Pointer: A pointer that has not been initialized, pointing to random memory. Dereferencing it is undefined behavior.

Examples

#include <stdio.h> #include <stdlib.h>  int* getDanglingPointerFreedByStackMemory() { int a = 30; return &a; // this is a dangling pointer: I'm returning the address of a local variable, which is on the stack, not the heap -> never do this } int* getDanglingPointerManuallyFreedHeapMemory() { int* a = malloc(sizeof(int)); *a = 20; free(a); // memory freed becomes a dangling pointer return a; } int main() { // Dangling Pointer example int* res = getDanglingPointerFreedByStackMemory(); int* res2 = getDanglingPointerManuallyFreedHeapMemory(); printf("res: %d\n", *res); // undefined behavior printf("res2: %d\n", *res2); // undefined behavior // Wild Pointer example int* wildPtr; // uninitialized printf("wildPtr: %d\n", *wildPtr); // undefined behavior return 0; } 
Enter fullscreen mode Exit fullscreen mode

Why It Matters for All Developers - Not Just Low-Level Programmers

  • Helps understand memory safety and program crashes.
  • Improves debugging skills when using third-party libraries or system calls.
  • Builds intuition about how memory management works under the hood, which is useful for optimization and avoiding logic bugs.
  • Increases awareness of security risks from unsafe memory access.
  • Understanding memory management helps write more efficient and performant code.

References

Top comments (0)