Bonjour,
Dans ton module définissant
main(),
data est une variable globale. Il n'en existe qu'une seule instance lors de l'exécution du programme. Tu l'utilises sans l'initialiser. C'est probablement ce qui a entraîné le crash de ton programme.
Dans ta classe
Calcule, il y a un membre qui s'appelle
data, mais le compilateur se moque qu'elle porte le même nom que ta variable globale, car elle n'a rien à voir. Au cours de l'exécution du programme, à chaque instant, il existe autant d'instances de
Calcule::data que d'objets
Calcule.
A part ça, il y a aussi énormément d'autres problèmes dans ce code.
En voici une liste incomplète :
- Ton code n'est pas indenté.
- Tu devrais créer une classe qui s'appelle Matrice. Ensuite, ta fonction qui calcule une distance avec une autre matrice devrait prendre en paramètre un const Matrice & plutôt qu'un float**.
- Ta fonction Calcule::Afficher a accès à une matrice à travers tes membres Calcule::nbl, Calcule::nbc et Calcule::data. Elle prend en compte les deux premiers mais ignore le 3e au profit d'un paramètre float ** mat. Ce n'est pas cohérent.
- Ta fonction Calcule::calcule_dis n'a aucun sens.
- Ton destructeur Calcule::~Calcule ne libère pas correctement la mémoire. Avant de faire un delete[] sur data, il faut aussi en faire un sur chaque data[i]. Ou alors, tu peux laisser ton destructeur ainsi si tu corrige le problème ci-dessous.
- Quand tu construis la matrice, tu appelles new autant de fois que le nombre de lignes + 1. Ce n'est pas performant. Il vaut mieux allouer d'un coup un tableau de taille nbLignes x nbColonnes. Par exemple, tout coefficient (i, j) sera l'élément numéro i + j x nbLignes de ton tableau (si la numérotation commence à 0). D'ailleurs, ce n'est qu'à cette condition que, dans ton destructeur, tu peux n'appeler qu'une seule fois delete[] sans provoquer de fuite mémoire.
Il reste beaucoup à dire, mais je m'arrête là pour l'instant.
Partager