Fehler mit Destruktor



  • Hallo,
    ich habe ein Problem beim Erstellen einer Klasse Polynom.
    EIn Polynom soll aus einem unsigned int deg bestehen, der den Grad angibt, und aus einem Array der Länge deg+1 für die Koeffizienten.

    Als erstes habe ich in der Klasse Polynom eine Memberfunktion
    polynom(unsigned int) geschrieben. Diese Funktion erstellt ein Array der Länge deg+1 und füllt das Array mit Nullen.

    Hier ist mein Quelltext:

    [/cpp]
    #include<iostream>
    
    //Polynomklasse
    class polynom
    {
      private:
        unsigned int M_deg;
        double* M_coeff;
    
      public:
    
        //Nullkonstruktor
        polynom(unsigned int n)
        {
    
          M_coeff= new double[n+1];
    
          for(unsigned int i=0;i<=n+1;i++)
          {
    	M_coeff[i]=0.0;
          }
          std::cout<<"Nullpolynom erzeugt.\n";
        }
    
        //Destruktor
        ~polynom()
        {
          delete[] M_coeff;
        }
    
    };
    
    //Hauptprogramm
    int main()
    {
      unsigned int f_grad=2;
      double f_coeff[]={0.0,0.0,1.0};
    
      polynom(2);
    
    }
    

    Das Problem liegt bei meinem Destruktor.
    Das Programm lässt sich zwar ohne Fehler compilieren, doch wenn ich es ausführe
    bekomme ich als Ausgabe:

    Nullpolynom erzeugt.
    *** glibc detected *** ./uebung7b: free(): invalid next size (fast): 0x0804b008 ***
    ======= Backtrace: =========

    und dann folgen eine Menge Dateipfade Nullen,Einsen und anderes Zeug.
    Aber was habe ich falsch gemacht?
    Wenn ich den Destruktor auskommentiere funktioniert alles.



  • class polynom 
    { 
    	private: 
    		unsigned int M_deg; 
    		double* M_coeff; 
    
    	public: 
    	polynom(unsigned int n) :
    		  M_coeff(new double[n])
    	{ 
    		for(unsigned int i = 0; i != n; i++) 
    		{ M_coeff[i]=0.0; }
    
    		std::cout<<"Nullpolynom erzeugt.\n"; 
    	} 
    
    	~polynom() 
    	{ delete[] M_coeff; } 
    };
    

Anmelden zum Antworten