Ca fait plusieurs heures que je me prends la tête avec un truc qui, j'en suis persuadé, va faire "a mais oui bien sûr" quand j'aurai eu la solution. Le problème c'est que je suis encore trop newbie pour décoder tout ce que ma petite bête (entendre, mon pc) m'envoie comme message.
J'ai donc écrit le programme suivant en C++, qui définit une classe de vecteur lorsqu'on lui donne la dimension et un pointeur pointant une liste de nombres (de la même dimension)
Le problème, c'est que lorsque j'execute ce programme, au lieu de me dire que tout va bien, il me dit : "glibc detected double free or corruption" avec tout un blabla derrière. J'ai cherché sur google, j'ai relu mon prog voir si je n'avais pas une erreur de segmentation, mais rien à faire.
Quelqu'un éclairerait ma lanterne ?
Cordialement,
AB
#include <cstdlib>
#include <iostream>
#include <climits>
#include <cfloat>
#include <cmath>
using namespace std;
class Vector {
int ndim;
double* data;
public:
Vector(int n, double d[]) {
ndim=n;
for (int i=0; i<ndim; i++){
data= new double[n];
d[i]=(*data);
}
};
~Vector() {
for (int i=0; i<ndim; i++) {
delete[] data;
}
};
Vector& operator+=(const Vector& q);
Vector& operator-=(const Vector& q);
double operator[](int i) const { return data[i]; };
friend Vector operator+(const Vector& p,const Vector& q);
friend Vector operator-(const Vector& p,const Vector& q);
friend double operator*(const Vector& p,const Vector& q);
friend ostream& operator<<(ostream& s, Vector& p);
};
int main(int argc, char *argv[])
{
double l[]={1.0,2.0,3.0,4.0};
Vector (4, l);
system("PAUSE");
return EXIT_SUCCESS;
}
Vector& Vector::operator+=(const Vector& a) {
for(int i=0; i<a.ndim; i++){
data[i]+=a[i];
}
return *this;
}
Vector& Vector::operator-=(const Vector& a) {
for(int i=0; i<a.ndim; i++){
data[i]-=a[i];
}
return *this;
}
Vector operator+(const Vector& a,const Vector& b) {
double d[a.ndim];
for(int i=0; i<a.ndim; i++){
d[i]=a[i]-b[i];
}
return Vector(a.ndim, d);
}
Vector operator-(const Vector& a,const Vector& b) {
double d[a.ndim];
for(int i=0; i<a.ndim; i++){
d[i]=a[i]+b[i];
}
return Vector(a.ndim, d);
}
double operator*(const Vector& a,const Vector& b) {
double s=0;
for(int i=0; i<a.ndim; i++){
s+=a[i]*b[i];
}
return s;
}
ostream& operator<<(ostream& s, Vector& a) {
s << '(' <<a[0];
for(int i=0; i<a.ndim; i++) {
s << ',' << a[i];
}
return s << ')';
}