Search code examples
c++clinuxsignalscoredump

What is the difference between SIGABRT and SIGSEGV


I made the core dumped error with the two pieces of codes below:

//test.cpp
int main()
{
    int *p = new int;
    *p = 100;
    delete p;
    delete p;
    return 0;
}

//test2.cpp
int main()
{
    int *p = new int;
    *p = 100;
    delete p;
    *p = 111;
    std::cout<<*p<<std::endl;
    return 0;
}

Gdb told me that the first piece of code got core dumped because of the signal SIGABRT, whereas the second piece of code got core dumped because of the signal SIGSEGV.

Could you tell what is the difference?


Solution

  • The SIGABRT is explicitly detected and signaled by the implementation of delete whose detected the invalidity of the second delete. It is launch by calling the abort function

    The SIGSEGV is different, it is undergoing rather than detected by a check in a library like the previous, it is launch through the memory management of the OS

    see https://en.cppreference.com/w/c/program/SIG_types