如果记录了导致不良行为的情况,API是否可以接受不良行为(如段错误,总线错误,内存泄漏)?或者它应该在所有已知条件下“优雅地”失败?
答案 0 :(得分:2)
Absolutely. It's called undefined behavior (link),但是您应该只在条件验证导致不可接受的运行时性能受到影响或大量复杂代码的情况下使用它,并且文档可以清楚地说明这些条件是什么。
答案 1 :(得分:0)
不,不是
答案 2 :(得分:0)
我个人更喜欢在任何一天发生崩溃的优雅故障,特别是如果已知并记录了崩溃情景的原因。希望自从它有文件证明它将在未来的某个时间得到修复。是的? ;)
答案 3 :(得分:0)
和其他人一样,我相信在崩溃中优雅地失败。如果失败的性质完全取决于使用API实现内部计算的值,那么它应该是一个优雅的失败。然而,还必须考虑到,当输入不良导致故障时,您可能只需要依赖文档,因为预防可能会损害奇数球案件安全性的常见情况。如果您的软件要在关键任务环境中运行,这可能是值得的。
因此...
如果API收到指针,则很可能无法确定指针的有效性(通常情况下)或计算成本太高(在API控制指向内存的生命周期的情况下)到,因为它必须被跟踪和搜索)
通过检查地址的模数和平台的对齐,很容易抵消大多数“sigbus”由于输入参数的对齐。请注意,验证主要取决于平台。如果您在多个平台上工作,这可能会容易出错。
就内存泄漏而言,您最希望的是记录内存的所有权协议。难以“优雅地”失败。您实际上可以将内存泄漏视为“优雅”失败。