Existe-t-il un moyen de déterminer (par programme, bien sûr) si un pointeur donné est "valide" ? Vérifier la présence de NULL est facile, mais qu'en est-il de choses comme 0x00001234 ? Lorsque l'on essaie de déréférencer ce type de pointeur, une exception ou un crash se produit.
Une méthode multiplateforme est préférable, mais une méthode spécifique à une plateforme (pour Windows et Linux) est également acceptable.
Mise à jour pour clarification : Le problème n'est pas lié à des pointeurs stables/libres/non initialisés ; à la place, j'implémente une API qui prend des pointeurs de l'appelant (comme un pointeur sur une chaîne, un handle de fichier, etc.) ). L'appelant peut envoyer (volontairement ou par erreur) une valeur invalide comme pointeur. Comment puis-je éviter un crash ?
0 votes
Voir aussi stackoverflow.com/questions/496034/
0 votes
Je pense que la meilleure réponse positive pour linux est donnée par George Carrette. Si cela n'est pas suffisant, envisagez de construire la table des symboles de fonctions dans la bibliothèque, ou même un autre niveau de table des bibliothèques disponibles avec leurs propres tables de fonctions. Puis vérifiez par rapport à ces tables exactes. Bien sûr, les réponses négatives sont également correctes : vous ne pouvez pas vraiment être sûr à 100% qu'un pointeur de fonction est valide ou non, à moins que vous n'imposiez de nombreuses restrictions supplémentaires à l'application utilisateur.
0 votes
La spécification API spécifie-t-elle réellement une telle obligation à respecter par l'implémentation ? Au fait, je prétends que l'on n'a pas supposé que vous êtes à la fois le développeur et le concepteur. Ce que je veux dire, c'est que je ne pense pas qu'une API spécifierait quelque chose comme "Dans le cas où un pointeur invalide est passé comme argument, la fonction doit gérer le problème et retourner NULL". Une API s'engage à fournir un service dans des conditions d'utilisation correctes, pas par des bidouillages. Néanmoins, cela ne fait pas de mal d'être un peu à l'abri des erreurs. L'utilisation d'une référence permet d'éviter la propagation de tels cas :)