2010-11-01 4 views

Répondre

2

Les réseaux sont fondamentalement cassés de cette façon, vous ne pouvez pas les vérifier de manière fiable. Ni le compilateur. Cependant, le compilateur C++ d'Intel peut certainement compiler la classe vectorielle. Activez le débogage de l'itérateur, utilisez l'accesseur at().

+0

Il est inexact de dire que vous ne pouvez pas vérifier de manière fiable des bornes des tableaux C. Si vous souhaitez vous limiter au code C portable conforme aux normes, il n'est pas défini pour accéder au-delà de la fin d'un tableau, de sorte qu'un compilateur ou un environnement d'exécution peut signaler des erreurs. Vous devez autoriser les pointeurs à avoir des valeurs telles que array [-1] ou array [size] (un élément après l'une ou l'autre fin), mais vous pouvez intercepter les déréférencer. –

+0

Les pointeurs Qcheck du compilateur C d'Intel le font. Il y a même un support matériel, Intel MPX (Memory Protection eXtensions) qui est censé rendre cette exécution plus rapide. (Je dis "supposé" parce qu'Intel a cassé mon design original pour ce qui est devenu MPX, ce qui fait qu'il est souvent plus lent que de ne pas utiliser les instructions MPX, je ne peux qu'espérer que cela sera corrigé dans le futur.) –

+0

la vérification de C est que, chaque fois que vous prenez l'adresse d'un objet, vous associez des bornes à cette adresse. Le pointeur d'Intel contrôlant le compilateur et le magasin MPX qui se lient dans des registres spéciaux à l'intérieur du CPU et dans une structure de données spéciale "non adjacente" essentiellement accessible par une recherche de hachage de l'adresse du pointeur en mémoire. J'ai appelé ces gros-pointeurs non adjacents.) Il est complètement compatible avec le code C portable, exécutant toutes les suites de tests de validation. Il a même trouvé des bugs dans les benchmarks SPEC dont nous n'étions pas conscients. –

1

Si vous travaillez sous Linux ou OS X, valgrind peut vous aider à trouver des erreurs liées à l'accès à la mémoire. Ce n'est pas compatible avec C++, donc faire correspondre sa sortie avec votre code peut prendre un peu de travail.

Questions connexes