Я конвертирую чрезвычайно большую и очень старую (25 лет!) Программу из C в C ++.
В нем есть много (очень очень много) мест, где я обращаюсь к глобальному одномерному массиву UBYTE, используя различные целочисленные индексы. Иногда этот индекс может быть отрицательным.
Я иногда, но не всегда, ловил этот случай и следил, чтобы ничего не пошло не так, но, как мера пояса и фигурных скобок, я фактически попытался убедиться, что непосредственно перед массивом был еще один кусок памяти, и заполнил его. с правильными значениями, такими, что если бы я случайно пропустил ловушку условия отрицательного числа, тогда в доступе к массиву все равно будет выбран правильный ответ. Это действительно хорошо работало в течение многих лет.
Но теперь в C ++ кажется, что доступ к массиву с отрицательным числом ведет себя по-другому, и теперь у меня программа ведет себя плохо. Я исправил один случай необработанного отрицательного числа, и программа, кажется, работает нормально, но я нервничаю, что не перехватил все отрицательные числа, и могут возникнуть проблемы.
Так что мой вопрос сейчас таков: есть ли способ во время выполнения для меня обнаружить какие-либо случаи доступа к массивам с отрицательными индексами? Я буду впечатлен, если кто-нибудь может придумать ответ. Если вы уверены, что это невозможно сделать каким-либо автоматическим способом, то скажите мне, что это тоже ценная информация.
Я должен просто добавить, что я на самом деле не программист на C ++ (пока). Пока что все, что я сделал, - это абсолютный минимум (почти ничего), чтобы заставить программу компилироваться с помощью компилятора C ++. Поэтому, если ваш ответ включает в себя причудливые «только эксперты, решения C ++», попробуйте объяснить словами одним слогом или дайте мне ссылку, чтобы я мог ее найти.