如何从 free() 或 delete() 中捕获或处理段错误
How to catch or handle segfault from free() or delete()
在 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% 的情况下,这是一个内存访问错误:-)如果段错误发生在调用 delete
或 free()
期间,则很可能您遇到了双重问题。
您可以使用 GDB 进行调试,并找出您是否正在尝试释放以前未分配的指针。
相关文章:
- 使用返回对象的函数处理错误
- C++:处理错误,看不懂我的错误
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- C++ 异常处理错误输出
- 信号处理错误
- 文件处理I/O C 错误
- 文件处理 - 错误:与 while 循环 (C++) 中的"运算符>>"不匹配(代码::块)
- SDL的事件处理错误
- HMODULE在重建导入地址表IAT时处理错误
- C++ 中的文件处理错误 - 调用"std::basic_fstream<char, std::char_traits<char> >::open(const char[8],
- 在处理线程时,处理错误的正确方法是什么
- 处理C++错误
- 异常处理C++错误
- CUDA图像处理错误
- 文件处理错误
- 代码::阻止资源预处理错误
- 使用模板创建类的新实例,不知道如何处理错误
- Qt 与 opencv 异常处理错误
- 提升 MSM 中的错误处理错误
- 如何处理错误“vtkTrivialProducer :此数据对象不包含请求的范围”