我们如何让我们的 C++ 程序自行修复数组索引超出范围?

How do we make our C++ programs fix array index out of range by themselves?

我想使用一些不是我写的C++代码。 但是,代码中有很多数组索引超出范围。 此外,数组的长度可能不是固定的;例如,它们可能由输入图像的大小决定。

我没有足够的预算来手动修复它们,所以我在这里问这个问题。

我希望 a[i] 可以是 a[0] if i<0a[a.Length-1] if i>=a.Length,但我可以保留代码 a[i]

如何制作?

您可以编写一个(模板化的)class 来包装一个数组并重载 [] 运算符以执行对底层数组的边界检查访问。然后你可以使用这个 class 而不是普通的 C 数组。

这将在很大程度上取决于应用程序如何使用数组。如果数组是一个全局变量或 structure/class 的一部分,并且只被 [] 访问过,那么它将工作得很好,但是如果数组被 "degrading" 传递给一个指针(并注意数组参数实际上是指针参数)然后需要做更多的工作,改变参数类型并可能创建一个单独的 "checked array reference" class 除了你的 "checked array".

您可能想尝试使用原始数组初始化的包装器 class,然后使用 operator[] 按您的需要运行。