如何从free()或delete()捕获或处理segfault 在C++中,我有一个服务器代码连续运行24×7,但是在释放缓冲区的时候,我有时会得到分段错误。 我试过了,也试过了 try { free(partialBuf); } catch (...) { printf("Caught partial buf free error"); }

如何从free()或delete()捕获或处理segfault 在C++中,我有一个服务器代码连续运行24×7,但是在释放缓冲区的时候,我有时会得到分段错误。 我试过了,也试过了 try { free(partialBuf); } catch (...) { printf("Caught partial buf free error"); },c++,linux,C++,Linux,提前谢谢 > P>在其他C++异常的意义上,SeExtRebug也不例外,因此不能用 >尝试< >代码> catch < /C>。segfault可能有很多原因,但在99.9%的情况下,它是一个内存访问错误:-)如果segfault发生在调用delete或free()的过程中,很可能是您遇到了问题。您可以使用GDB进行调试,并找出你是否试图释放一个以前没有分配的指针。因为你显然能够使用尝试/catch < /C> >,你正在编写C++代码。这有助于了解您使用的是哪种语言 然后,解决方案是使用s

提前谢谢

> P>在其他C++异常的意义上,SeExtRebug也不例外,因此不能用<代码> >尝试< <代码> >代码> catch < /C>。segfault可能有很多原因,但在99.9%的情况下,它是一个内存访问错误:-)如果segfault发生在调用
delete
free()
的过程中,很可能是您遇到了问题。

您可以使用GDB进行调试,并找出你是否试图释放一个以前没有分配的指针。

因为你显然能够使用<代码>尝试/catch < /C> >,你正在编写C++代码。这有助于了解您使用的是哪种语言

然后,解决方案是使用
std::shared\u ptr
。指针可能在多个位置超出范围。使用
shared_ptr
您不再调用
free
作为奖励
shared_ptr
将只调用
delete
一次(在最后一个指针超出范围后)


但是,您现在应该使用
new
来分配内存,而不是
malloc

try
catch
c
中?不在
c++
中?为什么
免费()
?为什么不
delete
?您无法捕获SEGFULT。您不应该尝试处理SEGFULT。这是一个错误,找到原因并修复它!这不是一件你应该随便忽略的事情。也就是说,如果我没有弄错的话,segfault是一个信号
SIGSEGV
——请阅读c语言中的信号处理,您可能可以忽略它。但这只会给以后带来更多的痛苦。
如何捕获或处理segfault
。。。运行调试器并修复代码。最好最简单的方法。@jepio以10秒的优势击败了我。:-)谢谢。但有没有办法知道指针是在调用free()之前被释放的,还是它的内存仍然可以访问?是的。使用valgrind或类似工具。