2011-01-17 4 views

Répondre

3

En bref: Non

C ne fonctionne pas de contrôle d'exécution, sauf si vous les faites à la main.

Vous pouvez utiliser vos propres fonctions, macros et mise en mémoire par tampon pour vous protéger contre les accès non valides. Cependant, vous devrez utiliser cette interface partout, ce qui signifie que vous perdrez l'accès direct à ce tampon.

Vous constateriez également un impact sur les performances en raison des vérifications de condition supplémentaires. Vous pourriez peut-être éviter cela en utilisant un accès direct sur les branches de code dont il est prouvé qu'elles ne provoquent pas d'accès en dehors des limites.

EDIT:

Il y a aussi la question assez importante de « ce qui devrait le code faire une fois que la détection d'un accès non valide ». Votre programme doit-il afficher une erreur et quitter, comme s'il avait rencontré une exception dans d'autres langues? Devrait-il ignorer l'erreur? Devrait-il tenter de le réparer?

La voie C pour traiter cette question est de regarder-avant-saut et faire en sorte que chaque branche code/partie est au préalable en toute sécurité, plutôt que de vérifier chaque accès.

1

La réponse courte: Non

La réponse longue:
Pour assurer encore quelque chose d'aussi stupide que buffer[ULLONG_MAX] ne va pas hors limites, vous devez déclarer votre tampon avec un bond plus grand que le plus grand nombre entier représentable sur le système. Ce n'est évidemment pas possible, mis à part la quantité de mémoire dont un tel tampon aurait besoin.

La solution pratique est que vous gardiez manuellement la trace de la taille de votre tampon et une indexation non fiable dans la mémoire tampon est vérifiée par rapport à la taille du tampon.

1

Voir notre Memory Safety Checker, qui a utilisé comme aide au débogage, instrumente votre code C pour déterminer si vous faites des erreurs avec des tableaux ou des tampons. Ceci trouve des problèmes que valgrind ne peut pas.

Questions connexes