如何从 free() 或 delete() 中捕获或处理段错误

How to catch or handle segfault from free() or delete()

本文关键字:处理 错误 段错误 delete free      更新时间:2023-10-16

在 c++ 中,我有一个 24*7 全天候连续运行的服务器代码,但在释放缓冲区时有时会出现段错误。我也尝试过捕捉

        try {
                    free(partialBuf);
                } catch (...) {
                    printf("Caught partial buf free error");
                }

提前感谢!

由于您显然能够使用try/catch,因此您正在编写C++代码。它有助于了解您正在使用哪种语言。

然后的解决方案是使用 std::shared_ptr .指针可能有多个超出范围的位置。有了shared_ptr,您就不再调用free并且作为奖励,shared_ptr只会调用delete一次(在最后一个指针超出范围之后)。

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

错误不是其他C++异常意义上的例外,因此您无法通过try/catch捕获它。段错误可能有多种原因,但在 99.9% 的情况下,这是一个内存访问错误:-)如果段错误发生在调用 deletefree() 期间,则很可能您遇到了双重问题。

您可以使用 GDB 进行调试,并找出您是否正在尝试释放以前未分配的指针。