Généralement, la mémoire de l'objet n'est pas écrasée, mais une partie de la mémoire est en dehors de l'objet. Si cela frappe les structures de contrôle de malloc, le libre arbitre flippe une fois qu'il y accède et essaie de faire des choses bizarres basées sur la structure corrompue.
Si vous ne remplissiez réellement que la mémoire d'objet avec des trucs stupides, malloc/free ne saurait en aucun cas le savoir. Votre programme peut tomber en panne, mais pour d'autres raisons.
Jetez un oeil à valgrind. C'est un outil qui émule le processeur et surveille chaque accès mémoire pour détecter les anomalies (comme essayer d'écraser les structures de contrôle de malloc). Il est vraiment facile à utiliser, la plupart du temps vous commencez simplement votre programme à l'intérieur de valgrind en ajoutant valgrind
sur le shell, et cela vous fait beaucoup de mal.
En ce qui concerne C++: toujours assurez-vous d'utiliser new conjointement avec delete et, respectivement, new [] en conjonction avec delete []. Ne les mélange jamais. De mauvaises choses arriveront, souvent semblables à ce que vous décrivez (mais valgrind vous préviendra).
s'il vous plaît choisir un titre plus descriptif – hop
hop, s'il vous plaît suggérer un, je vais changer. – grigy
Que diriez-vous de "pourquoi détruire un objet corrompu provoque une erreur sans double-g ++?" –