Un crash à la fermeture, c'est très classiquement 2 delete qui sont faits.
Je pense que dans ton cas c'est légèrement différent.
Citation :
Unhandled exception at 0x00445278 in Animants.exe: 0xC0000005: Access violation reading location 0xcdcdcdc1.
Sur le message on remarque que quelque part tu essaie de lire un pointeur qui pointe à l'adresse 0xcdcdcdc1.
Par expérience, on remarque que lorsque visual libère de la mémoire, il met des valeurs génériques (qui est très souvent une suite d'octet CD ... CD).
C'est ton cas ici. Donc, quelque part, un delete a été effectué sur un pointeur de pointeur (ce qui conviendrait parfaitement à un vector).
Ensuite, tu essaie de lire (ou de détruire) un objet du vector qui a déjà été détuit.
Ceci peut généralement se voir en mettant des points d'arrêts dans tous les destructeurs.
Je te conseille donc de vérifier:
1. tout possible accès à ton vector après son clear()
2. qu'aucun pointeur pointant sur un objet du vecteur n'est détruit
3. (avec 2.) qu'aucun objet du vecteur ne détruit un autre objet du vecteur.
Classiquement, ça se produit, lorsqu'on fait une liste d'objet, et que d'autres objets extérieurs contiennent des pointeurs sur un (ou plusieurs) objet de la liste. Dans ce cas, il faut penser à ne pas faire de delete sur le pointeur.
Après ça peut être plus tordu avec des pointeur qui pointent sur des pointeurs qui pointent...