Pas mal de petit soucis:
- Variable globale: Aucune, absolument aucune raison d'avoir une variable global en C++. Ici, la variable devrait être un attribut de classe normal ou statique. Ou encore un singleton.
- int*: En C++ on a des conteneurs: std::vector, std::list, std::deque, etc... Rare sont les cas où ils ne sont pas à privilégier sur des "type*" du C.
- La fonction addToCluster est vraiment bizarre. Il y a sûrement moyen de l'architecturer d'une autre manière. Ici, ce n'est pas la question, mais ton code semble architecturé au hasard.
Répondons un peu plus à ta question:
Je pense que c'est un problème vicieux, mais très classique.
Imagine que j'ai l'objet suivant: percolation p;
Si je passe "p" par copie, au lieu de le passer par référence, ça peut poser un gros problème.
void f1(percolation p);
void f2(percolation& p);
void f3(percolation* p);
Ici, il n'y aura pas de problème pour f2 et f3. En revanche, pour f1, l'objet p est copié lors du passage en argument. Toute copie locale à une fonction étant détruite au sortir de celle-ci, ton objet p est détruit. La variable globale lat est alors détruite une première fois. L'objet originale, lors de sa destruction détruira une deuxième fois celle-ci, d'où l'erreur.
Bien évidemment, il me faut plus de code pour te le confirmer, mais j'ai l'intuition que c'est le problème :p
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio