在c ++中,我有一个24 * 7连续运行的服务器代码但是我有时会在释放缓冲区时遇到段错误。 我也尝试了尝试捕获。
try {
free(partialBuf);
} catch (...) {
printf("Caught partial buf free error");
}
提前致谢!
答案 0 :(得分:0)
在其他C ++异常意义上,段错误不是例外,因此您无法通过try
/ catch
来捕获它。段错误可以有多种原因,但在99.9%的情况下它是内存访问错误:-)如果在调用delete
或free()
期间发生了段错误,很可能是你有double-free问题。
答案 1 :(得分:0)
您可以使用GDB进行调试,并查明您是否正在尝试释放之前未分配的指针。
答案 2 :(得分:0)
由于您显然能够使用try/catch
,因此您正在编写C ++代码。它有助于了解您正在使用的语言。
然后解决方案是使用std::shared_ptr
。您可能有多个指针超出范围的位置。使用shared_ptr
,您不再调用free
,和作为奖励shared_ptr
只会调用delete
一次(在最后一个指针超出范围之后) )。
但是,您现在应该使用new
而不是malloc
分配内存。