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

时间:2015-03-16 10:14:13

标签: c++ linux

在c ++中,我有一个24 * 7连续运行的服务器代码但是我有时会在释放缓冲区时遇到段错误。 我也尝试了尝试捕获

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

提前致谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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