J'ai beaucoup lu, y compris here on SO qui suggère que c'est une très mauvaise idée en général et que la seule chose que vous pouvez faire en toute sécurité est de quitter le programme. Je ne suis pas sûr que ce soit vrai.Est-il possible d'intercepter une violation d'accès dans ce scénario?
Ceci est pour un allocateur de mise en commun de mémoire qui remet des allocations importantes à malloc. Pendant pool_free() un pointeur doit être vérifié s'il appartient à un pool ou a été alloué avec malloc. En arrondissant l'adresse à la limite de 1 Mo la plus proche, j'obtiens un pointeur vers le début d'un bloc de mémoire dans le pool, ou undefined si malloc a été utilisé. Dans le premier cas je peux facilement vérifier que le bloc de mémoire appartient au pool, mais si ce n'est pas le cas je vais échouer cette vérification, OU Je vais avoir une violation d'accès (notez que ceci est en lecture seule processus). Ne pourrais-je pas attraper ceci avec SEH (Windows) ou manipuler le signal (POSIX) et le traiter simplement comme une vérification échouée? (c'est-à-dire que cela n'est possible que si malloc a été utilisé, donc passer le ptr à free())
Editer: Les gens semblent manquer le bloc opératoire ci-dessus. Je ne m'attends pas à obtenir une violation d'accès si le pointeur a été alloué avec malloc, mais c'est un résultat possible. La procédure utilisant le pointeur au début du bloc (à la limite de 1 Mo) est de vérifier un nombre magique, puis de suivre un pointeur vers le pool de mémoire, et de vérifier qu'il contient effectivement le pointeur mentionné ci-dessus. Si l'une de ces étapes en lecture seule produit une violation d'accès, elle échoue à la validation aussi sûrement que si une étape individuelle échouait.
Tout comportement avaidable _undefined_ devrait être _really_ être corrigé. Tout le reste est de la folie. – LukeN