Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

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

  • Difficulty Level : Easy
  • Last Updated : 12 Oct, 2021

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: 
 

Take a step-up from those "Hello World" programs. Learn to implement data structures like Heap, Stacks, Linked List and many more! Check out our Data Structures in C course to start learning today.
  • 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. 
     

C




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;
}

 

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: 
     

C++




// C++ program to illustrate
// Core Dump/Segmentation fault
#include <iostream>
using namespace std;
 
int main(void)
{
    // allocating memory to p
    int* p = (int*) malloc(8*sizeof(int));
     
    *p = 100;
     
    // deallocated the space allocated to p
    free(p);
     
    // core dump/segmentation fault
    //  as now this statement is illegal
    *p = 110;
     
    return 0;
}
 
// This code is contributed by shivanisinghss2110

C




// 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;
}

Output: 
 

Abnormal termination of program.

 

  • Accessing out of array index bounds : 
     

CPP




// 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;
}

Output: 
 

Abnormal termination of program.

 

  • Improper use of scanf() : 
    scanf() function expects address of a variable as an input. Here in this program n takes 
    value of 2 and assume it’s address as 1000. If we pass n to scanf(), input fetched from STDIN is placed in invalid memory 2 which should be 1000 instead. It’s a memory corruption leading to Segmentation fault. 
     

C++




// C++ program to demonstrate segmentation
// fault when value is passed to scanf
#include <iostream>
using namespace std;
 
 
int main()
{
   int n = 2;
   cout << " "<< n;
   return 0;
}
 
// This code is contributed by shivanisinghss2110

C




// C program to demonstrate segmentation
// fault when value is passed to scanf
#include <stdio.h>
 
int main()
{
   int n = 2;
   scanf(" ",n);
   return 0;
}

Output: 
 

Abnormal termination of program.

 

  • Stack Overflow 
    It’s not a pointer related problem even code may not have single pointer. It’s because of recursive function gets called repeatedly which eats up all the stack memory resulting in stack overflow. Running out of memory on the stack is also a type of memory corruption. It can be resolved by having a base condition to return from the recursive function.
     
  • Dereferencing uninitialized pointer 
    A pointer must point to valid memory before accessing it. 
     

C++14




// C++ program to demonstrate segmentation
// fault when uninitialized pointer is accessed.
#include <iostream>
using namespace std;
 
int main()
{
    int* p;
    cout << *p;
    return 0;
}
// This code is contributed by Mayank Tyagi

C




// C program to demonstrate segmentation
// fault when uninitialized pointer is accessed.
#include <stdio.h>
 
int main()
{
   int *p;
   printf("%d",*p);
   return 0;
}

 

This article is contributed by Bishal Kumar Dubey. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@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
Recommended Articles
Page :

Start Your Coding Journey Now!