Core Dump (Segmentation fault) in C/C++

Core Dump/Segmentation fault is a specific kind of error caused by accessing memory that “does not belong to you.”

  • When a piece of code tries to do read and write operation in a read only location in memory or freed block of memory, it is known as core dump.
  • It is an error indicating memory corruption.

Common segmentation fault scenarios:

  • Modifying a string literal :
    The below program may crash (gives segmentation fault error) because the line *(str+1) = ‘n’ tries to write a read only memory.

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    int main()
    {
       char *str; 
      
       /* Stored in read only part of data segment */
       str = "GfG";     
      
       /* Problem:  trying to modify read only memory */
       *(str+1) = 'n'
       return 0;
    }

    chevron_right

    
    

    Abnormal termination of program.
    

    Refer Storage for Strings in C for details

  • Accessing an address that is freed :
    Here in the below code, the pointer p is dereferenced after freeing the memory block, which is not allowed by the compiler. So it produces the error segment fault or abnormal program termination at runtime.
    Example:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C program to illustrate
    // Core Dump/Segmentation fault
    #include <stdio.h>
    #include<alloc.h>
    int main(void)
    {
        // allocating memory to p
        int* p = malloc(8);
        *p = 100;
          
        // deallocated the space allocated to p
        free(p);
          
        // core dump/segmentation fault
        //  as now this statement is illegal
        *p = 110;
          
        return 0;
    }

    chevron_right

    
    

    Output:



    Abnormal termination of program.
    
  • Accessing out of array index bounds :
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C++ program to demonstrate segmentation
    // fault when array out of bound is accessed.
    #include <iostream>
    using namespace std;
      
    int main() 
    {
       int arr[2];
       arr[3] = 10;  // Accessing out of bound
       return 0;
    }

    chevron_right

    
    

    Output:

    Abnormal termination of program.
    

This article is contributed by Bishal Kumar Dubey. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


15


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.