我正在编写一个客户机-服务器守护程序,该守护程序必须接受并转换特定的消息格式,检查它们是否提交以将所有 Activity 提交给DB。程序是多线程的。因此,我开始工作,并在某些情况下开始获得SIGSEGV。因此,我不得不重新设计程序并重新开始。
我想知道,是否有任何“最佳实践”或如何使SIGSEGV风险最小化的提示?
我知道,应该在使用前检查每个指针,并在删除后检查它是否为空,但是如果有什么高级的设计提示?
附言抱歉,如果我的问题很假,但是我在Google上搜索了该主题,但没有找到关于该主题的任何合理文章。感谢您的所有意见。
最佳答案
分割错误的主要来源是
解决此问题的主要策略包括:
std::unique_ptr
或std::shared_ptr
,如果只想指向东西,则将迭代器用于标准容器中)std::vector
)代替数组和指针算法如注释中所述,编码不良的并发或并行化可能会导致分段错误(以及许多其他问题),这与未初始化的变量可以类似,因为它们可能导致变量的值意外更改。解决此问题的一般策略包括:
std::atomic
或类似内容来保护但是,在某些情况下两者都可能意味着您失去了明显的性能优势。正确执行并行算法是认真分析和设计的问题。
关于c++ - 如何避免SIGSEGV?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16768532/