Vector Classe Hilfe



  • Hallo Leute ich habe ein Problem mit meiner Vector Klasse. Erstmal hier der Code. Weiter unten die Fehlerbeschreibung.
    Vector.h

    class Vector
    {	public:
    	  Vector(int l);
          ~Vector();
          void set_element(int pos, double value);
          double get_element(int pos);
          void get_size(int *length);
          double mult(Vector *vector_b);
    
    	private:
       	  int vlength;
          double *comp;
    };
    

    Vector.cpp

    #include <iostream>
    #include "Vector.h"
    
    using namespace std;
    
    Vector::Vector(int l)
    {	
    	vlength=l;
    	comp=new double[vlength];
    }
    
    Vector::~Vector()
    {	
    	delete[] comp;
    
    }
    
    void Vector::set_element(int pos, double value)
    {	
    	comp[pos]=value;
    }
    
    double Vector::get_element(int pos)
    {	
    	double value=comp[pos];
    	return value;
    }
    
    void Vector::get_size(int *length)
    {
    	*length=vlength;
    }
    
    double Vector::mult(Vector *vec2)
    {	int vec1_len;
    	double product = 0;
    
    	(*vec2).get_size(&vec1_len);
       for(int i=0; i<=vec1_len; i++)
       {
    	   double an =comp[i];
    
    	   product=product+ an *(*vec2).get_element(i);
       }
       return product;
    }
    

    main.cpp

    #include <iostream>
    #include "vector.h"
    using namespace std;
    
    int main()
    {
    	Vector v1(1);
    	Vector v2(1);
    	v1.set_element(0,1);
        v1.set_element(1,2);
        v2.set_element(0,2);
    	v2.set_element(1,2);
    
    }
    

    Und nun die Fehlerbeschreibung: Beim Aufruf des Destruktors, wenn ich mit delete den Speicher wieder Freigebe stürzt das Programm ab
    was habe ich falsch gemacht.
    Vielen dank im vorraus



  • ADA_ADA schrieb:

    int main()
    {
    	Vector v1(1);
    	Vector v2(1);
    	v1.set_element(0,1);
        v1.set_element(1,2);
        v2.set_element(0,2);
    	v2.set_element(1,2);
        
    }
    

    Du reservierst in obigem Beispiel nur Speicher für ein Element mit sizeof(double). Schreibst aber auf die Indizes 0 und 1. D.h. du schreibst über den von dir für das Array reservierten Speicher hinaus. => Da kann es schonmal krachen. Wobei es mich wundert, dass es hier erst beim Destruktor der Fall sein soll...

    Gruß Caipi



  • Danke ich wurde hier fast wahnsinnig
    bei dieser scheisse !!!!!!!!!!!


Log in to reply