Surcharge d'opérateurs et affectation
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 :
Code:
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); |
J'ai également défini un constructeur de copie :
Code:
1 2 3 4
|
// t_matrix:
// constructor of copy
t_matrix(const t_matrix & toCopy); |
Prenons un exemple :
Code:
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; |
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é.
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! :oops:
En vous remerciant d'avance,
Nicolas.