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