1
3
目前有两个问题:
(2) 您已检测到溢出或其他错误情况,如果继续,将导致(1)。
在第(1)种情况下,你是被水淹没的(除非失败的分配是愚蠢的大型和大型的);你
知道
失败的分配只是其中一个)。如果发生这种情况,你能做的最好的事情就是尽快崩溃,并留下尽可能多的证据。特别是,创建一个调用
如果它真的是(2),那么还有其他问题。具体来说,您能否从这种情况中恢复过来,并且不管用户的数据是否仍然完好无损?如果你能恢复,那么格兰德。。。这样做,用户永远不必知道。如果没有,那么你 . 如果不是,那就救人,死吧。如果用户的数据已损坏,请尽力 不保留损坏的数据 并让用户知道有些地方出了严重的问题。如果用户的数据已持久化,但已损坏,则。。。好。。。哎哟您可能需要考虑创建某种类型的恢复工具。 |
2
4
记录并引发异常。 对于其他程序员,而不是最终用户,您只能真正成为一个好公民,因此,将问题传递到楼上,并以一种清楚地解释发生了什么、问题是什么(给出数字)以及问题发生在哪里的方式来做,以便消除根本原因。 |
3
3
关于动态增长、基于阵列的存储,我们只能做这么多。我是超级计算机Moab调度程序的开发人员,我们还处理具有数千个处理器、数千个作业和大量作业输出的系统上的大量数据。在某些情况下,如果不创建一个全新的数据类型来处理大于UINT_MAX或LONG_LONG_MAX等的大小,就不能将缓冲区声明为更大,在大多数“普通”机器上,此时堆栈/堆空间无论如何都会耗尽。因此,我建议记录一条有意义的错误消息,防止集合爆炸,如果用户需要向CHDataStructures集合添加那么多内容,他们应该知道存在处理非常大的数字的问题,调用方应该检查添加是否成功(跟踪集合的大小,等等)。 另一种可能是,当无法分配具有无符号int或无符号long的较大数组时,将基于数组的存储转换为动态分配的、基于链表的存储。这将是昂贵的,但很少发生,因此对框架的用户来说不会太引人注目。由于动态分配的、基于链表的集合的大小限制是堆的大小,因此任何向集合添加足够多的项以“溢出”集合的用户都会遇到比其项是否成功添加更大的问题。 |
4
1
…只要让它运行,它最终会随着EXC_BAD_访问而消亡(我编译并运行了一个32位的应用程序,所以当我点击2**32对象时,我可以确保空间不足。 换句话说,抛出异常会很好,但我认为你真的不必做任何事情。 |
5
0
通过断言,您可以在代码中轻松地设置许多检查点,在这些检查点中,您可以验证事情是否正常工作。如果没有,默认情况下断言宏将记录错误(开发人员定义的字符串),并引发异常。您还可以使用自定义断言处理程序覆盖默认行为,并实现不同的方法来处理错误条件(甚至避免引发异常)。
|