Accéder à un tableau avec un nombre négatif!

Je suis de la conversion d'un extrêmement grand et très vieux (25 ans!) programme de C à C++.

En elle il ya beaucoup de (très très nombreux) des endroits où j'ai accès global dimensions UBYTE tableau à l'aide d'une variété de integer index. Parfois cet indice peut être négatif.

J'ai parfois, mais pas toujours, pris au piège de ce cas et a fait en sorte que rien ne s'est passé, mais comme une ceinture et bretelles mesure j'ai effectivement pris la peine de faire en sorte qu'il y avait une autre partie de la mémoire qui précède immédiatement le tableau et l'a rempli avec le droit des valeurs telles que, si j'ai involontairement omis de piéger le nombre négatif condition, alors une réponse correcte serait encore récupéré dans le tableau. En fait, cela a bien fonctionné pendant de très nombreuses années.

Mais maintenant sous C++, il semble que l'accès à un tableau avec un nombre négatif se comporte différemment et maintenant, j'ai un programme comporte mal. Je fixe un cas de non gérée nombre négatif et le programme semble fonctionner très bien, mais je suis nerveux que je n'ai pas piégé tous les nombres négatifs et il peut y avoir des problèmes à l'avance.

Donc ma question maintenant, est-il possible, au moment de l'exécution, pour moi, pour détecter toutes les instances de l'accès à des tableaux avec des index négatifs? Je vais être impressionné si quelqu'un peut venir avec une réponse. Si vous êtes à peu près certain qu'il ne peut pas être fait de toute façon automatisée ensuite me dire que l'information est précieuse, trop.

Je voudrais juste ajouter que je ne suis pas vraiment un programmeur C++ (encore). Jusqu'à présent tout ce que j'ai fait est la valeur absolue de minimum (presque rien) pour obtenir le programme à compiler sous un compilateur C++. Donc, si votre réponse implique de fantaisie "experts seulement, C++ solutions", alors s'il vous plaît essayer de l'expliquer par des mots d'une syllabe ou me donner un lien afin que je puisse le regarder.

Je n'ai même pas si ce que l'on pouvait accéder à un tableau dont la valeur est négative !
Si ça fonctionne, ne pas la toucher.
Si cela fonctionne, l'améliorer.
Rappelez-vous, que dans le C et le C++, le tableau d'indexation obéit à un[i] = *(a + i), c'est juste un simple calcul des adresses, rien de fantaisie. Si i est négatif, vous aurez accès à la mémoire avant que le tableau commence. Bien sûr cela peut changer en C++ avec une surcharge de l'opérateur[](), mais c'est le cas de base.
Négatif indices sont autorisés, mais aller à l'extérieur des limites du tableau n'est pas. Donc, si vous utilisez un indice négatif sur le début du tableau, c'est mauvais, mais si vous avez un pointeur p vers le troisième élément, alors p[-2] est parfaitement légal.

OriginalL'auteur Mick | 2009-09-14