2015-12-30 3 views
1

Я хочу использовать код C++, который не написан мной. Однако в коде есть много индекса массива вне диапазона. Кроме того, длины массивов могут быть нефиксированными; например, они могут быть определены размером входного изображения.Как мы можем заставить наши C++-программы самостоятельно исправить индекс массива вне диапазона?

У меня недостаточно бюджета, чтобы исправить их вручную, поэтому я задаю этот вопрос здесь.

Я надеюсь, a[i]a[0] может быть, если i<0 и a[a.Length-1] если i>=a.Length, но я могу держать код a[i].

Как это сделать?

+0

Вам необходимо выполнить чек. Магический способ сделать это не существует, особенно если вы говорите о простых старых массивах, а не 'vector', что в этом случае вы могли бы' .at() ', который проверяет границы. –

+2

И как вы ожидаете, что для создания рабочего кода? – Veedrac

+0

Должны ли они быть реальными массивами или вы можете написать свой собственный класс массивов с проверенными границами? – immibis

ответ

1

Вы можете написать (templated) класс, который обернул массив и перегрузил оператор [], чтобы выполнить проверку границ доступа к базовому массиву. Затем вы можете использовать этот класс вместо обычных C-массивов.

Насколько это выполнимо, это будет сильно зависеть от того, как приложение использует массив. Если массив является переменной gloabl или частью структуры/класса, и к ней всегда обращается [], тогда он будет работать отлично, но если массив передается arround путем «унижения» к указателю (и обратите внимание, что параметры массива действительно являются указателями параметры), тогда потребуется дополнительная работа, изменение типов параметров и возможность создания отдельного класса «проверенный массив», который будет использоваться в дополнение к вашему «проверенному массиву».

2

Возможно, вы захотите попробовать обертку class, которая инициализируется исходным массивом, а затем использует operator[], чтобы вести себя по мере необходимости.