Je suis bien conscient de la laideur de cette question, j'aimerais toujours savoir s'il est possible:
Lorsqu'un programme essaie de lire/écrire à un pointeur non valide (bloc NULL, non alloué, etc.) Windows bloque l'application avec une exception d'une violation d'accès.
La question est, est-ce qu'il y a un moyen de vérifier ce pointeur générera une exception avant d'essayer de l'utiliser, ou bien, existe-t-il un moyen d'attraper cette exception?
Attraper ce type d'erreurs aborde les symptômes, pas la cause fondamentale.
Les idiomes suivants travailleront sur n'importe quelle plate-forme:
initialiser tous les pointeurs à zéro
si vous ne pouvez pas garantir un pointeur est valide, vérifiez qu'il est non-0 avant de l'indirecter
lors de la suppression d'objets, définissez le pointeur sur 0 après la suppression
faites attention aux problèmes de propriété d'objet lorsque vous passez des pointeurs à d'autres fonctions
Il existe des fonctions IsBadReadPtr
et IsBadWritePtr
qui pourrait faire ce que vous voulez. Il y a aussi n article qui explique pourquoi vous ne devriez pas les utiliser.
Vous pouvez certainement tester si le pointeur est null!
if ( ptr == NULL ) {
// don't use it
}
C'est le seul test portable que vous puissiez faire. Windows fournit diverses API aux pointeurs de test, mais comme d'autres l'ont souligné, les utiliser peut être problématique.
Je pense que vous recherchez quelque chose comme Isbadreadptr.
Documentation:
http://msdn.microsoft.com/en-us/library/aa366713 (vs.85) .aspx
Je ne connais pas sur Windows, mais dans * Nix, vous pouvez installer un gestionnaire de signal SIGSEGV pour intercepter l'exception.