En traitant des écrasements de mémoire aléatoires, dans MSVC il est possible de valider l'état du tas en divers points avec un appel à _CrtCheckMemory, et de savoir avec au moins un petit niveau de confiance que le code jusqu'à la vérification n'était pas responsable pour toute erreur qui pourrait causer l'échec de new ou de malloc plus tard.GCC/XCode équivalent de _CrtCheckMemory?
En XCode, quelle est la manière équivalente d'essayer et de mettre en boîte dans un écrasement de mémoire? Tout ce que j'ai en ce moment est un échec aléatoire d'un appel à nouveau, quelque part dans les entrailles d'un code avec aucune idée réelle de combien de temps le code a fonctionné avec un tas corrompu jusqu'à ce point.
Dans un monde idéal, il serait possible d'être un pur C++ programmeur où toutes les structures du programme ont été implémentable avec C++ idiomes . Dans mon monde, je porte un code Windows de 10 ans sur le Mac, c'est écrit dans ... bien. un mélange de C, C + (un sous-ensemble bizarre de C++ produit par des gens qui ont appris C++ après C et écrit ce qui est essentiellement du code C, mais avec quelques classes), C++ qui doit interagir avec les bibliothèques dynamiques lls qui exportent fonctions, C fonctions de création d'interfaces, ou simplement en exportant des classes C++. amusement. –
Ceci est une déclaration ridicule. J'étais développeur chez Microsoft et _CrtCheckMemory() est très utilisé. Sur la base de cette déclaration de personnes, je suppose que nous avons tout fait mal chez Microsoft. La vérification de l'intégrité du tas et de la pile est utile pour trouver des dépassements de tampon, des problèmes d'assignation de pointeurs, des bugs que le compilateur génère ... Utilisez Valgrind sur Linux ou lancez votre propre outil qui accroche les allocations et effectue votre propre vérification avec certains sorte de nombre magique du début et de la fin de l'allocation. – Byron