我们如何制作C++;程序自行修复超出范围的数组索引? 我想使用一些不是我编写的C++代码。 但是,代码中有很多数组索引超出范围。 此外,阵列的长度可能不是固定的;例如,它们可以由输入图像的大小确定
我没有足够的预算来手动修复它们,所以我在这里问这个问题 如果我们如何制作C++;程序自行修复超出范围的数组索引? 我想使用一些不是我编写的C++代码。 但是,代码中有很多数组索引超出范围。 此外,阵列的长度可能不是固定的;例如,它们可以由输入图像的大小确定,c++,arrays,indexoutofrangeexception,C++,Arrays,Indexoutofrangeexception,我没有足够的预算来手动修复它们,所以我在这里问这个问题 如果I=a.Length,我希望a[I]可以a[0],但我可以保留代码a[I] 如何创建它?您可以编写一个(模板化)类,该类包装一个数组并重载[]运算符,以执行对底层数组的边界检查访问。然后可以使用这个类而不是普通的C数组 这项工作的可行性在很大程度上取决于应用程序如何使用数组。如果数组是gloabl变量或结构/类的一部分,并且只有[]才能访问,那么它将非常有效,但是如果数组通过“降级”传递给指针(请注意,数组参数实际上是指针参数),则需要
I=a.Length
,我希望a[I]
可以a[0]
,但我可以保留代码a[I]
如何创建它?您可以编写一个(模板化)类,该类包装一个数组并重载[]运算符,以执行对底层数组的边界检查访问。然后可以使用这个类而不是普通的C数组
这项工作的可行性在很大程度上取决于应用程序如何使用数组。如果数组是gloabl变量或结构/类的一部分,并且只有[]才能访问,那么它将非常有效,但是如果数组通过“降级”传递给指针(请注意,数组参数实际上是指针参数),则需要做更多的工作,更改参数类型并可能创建单独的参数“checked array reference”类将在“checked array”之外使用。您可能需要尝试使用原始数组初始化的包装器
类,然后使用运算符[]
按需操作。您必须执行检查。没有神奇的方法可以做到这一点,特别是如果您谈论的是普通的旧数组,而不是向量,在这种情况下,您可以.at()
边界检查由哪一个来完成。您希望如何准确地生成工作代码?它们必须是实际的数组,还是您可以编写自己的边界检查数组类?用bug替换其他bug通常不是一个好主意。(如果您有时间验证您的“修复”)“始终生成正确的结果–您需要验证每个数组访问–您应该有时间修复代码。)如果代码不是由您编写的,并且有很多数组超出范围,那么您可能会遇到比简单的“超出范围”数组更多的问题。