gpt4 book ai didi

c++ - SIGABRT 和 SIGSEGV 有什么区别

转载 作者:IT王子 更新时间:2023-10-29 01:03:09 25 4
gpt4 key购买 nike

我用下面两段代码造成了核心转储错误:

//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 告诉我,第一段代码因为信号 SIGABRT 而被核心转储,而第二段代码因为信号 SIGSEGV 而被核心转储。

你能说出有什么不同吗?

最佳答案

SIGABRT 被delete 的实现显式检测并发出信号delete 检测到第二次删除无效。它是通过调用 abort 函数启动的

SIGSEGV 不同,它是进行中,而不是像以前那样通过库中的检查来检测,它是通过操作系统的内存管理启动的

参见 https://en.cppreference.com/w/c/program/SIG_types

关于c++ - SIGABRT 和 SIGSEGV 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54303295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com