Bonsoir,
J'ai crée une classe t_matrix dont certains opérateurs ont été surchargés, afin notamment de supporter l'addition, la soustration et la multiplication de deux objets t_matrix. Les données sont stockées dans un tableau float *. Voici les prototypes de ces surcharges :
J'ai également défini un constructeur de copie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 // operator=: // defines operator = t_matrix & operator=(const t_matrix & toCopy); // operator+: // computes this+arg t_matrix operator+(const t_matrix & arg); // operator-: // computes this-arg t_matrix operator-(const t_matrix & arg); // operator*: // computes this*arg t_matrix operator*(const t_matrix & arg); // operator*: // computes this*arg t_matrix operator*(const double arg); // operator*: // computes arg*_matrix friend t_matrix operator*(const double arg, const t_matrix & _matrix);
Prenons un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // t_matrix: // constructor of copy t_matrix(const t_matrix & toCopy);
Lorsque j'effectue l'affectation via t_matrix L = A, le constructeur de copie est bien appelé et fait son travail. Lorsque j'effectue l'affection via M = A, il s'agit de l'opérateur d'affectation. Mais lorsque j'effectue A*x, qui retourne un objet de type t_matrix, ni le constructeur de copie ni l'opérateur d'affectation n'est appelé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 t_matrix A(3, 3, 1.0); // dim : m*n, valeur initiale = 1.0 t_matrix x(3, 3, 3.0); t_matrix K = A*x; t_matrix L = A; t_matrix M(3, 3, 0.0); M = A;
J'obtiens donc par la suite des erreurs de double free or corruption probablement à cause d'un double appel delete mat, où mat est de type float *.
Une subtilité (ou pas) doit probablement m'échapper... Help!
En vous remerciant d'avance,
Nicolas.
Partager