BLOCK_TYPE_IS_VALID



  • ich weiß, dieses thema ist schon häufiger behandelt worden, dennoch, ich komme nicht drauf...

    ich versuche es zu erläutern:
    ich generiere eine basisklasse, die selber klassen als member hat. diese member sind klassen die arrays oder matrizen darstellen und neben einem zeiger auf einen bereich verschiedene zusätzliche werte enthalten. so z.b.:

    class Vektor
    {
    
    public:
    	double *z;
    	int size;
    
    	Vektor(int s, double wert);
             ...
    }
    

    bei der deklaration der basisklasse werden die arrayvariablen mit einem konstruktor eingefügt, der ausschließlich einen zeiger festlegt, ohne die größe des arrays oder der matrix festzulegen (diese werte bekomme ich erst mit der instantiierung der basisklasse). so z.b.

    Vektor::Vektor(void)
    {
    	this->z =  new double[1];
    }
    

    nachdem ich ein objekt der basisklasse angelegt habe möchte ich in deren konstruktor den memberklassen werte zuweisen, wofür ich folgenden konstruktor mir ausgedacht habe:

    Vektor::VAlloc(int s)
    {	
    	this->size = s;
    
    	if (this->z)
    	{
    		delete[]this->z;
    		this->z = NULL;
    	}
    
    	this->z = new double[size];
    
    	for (int i=0; i<s; i++)
    		this->z[i] = 0;
    
    }
    

    diese array- und matrix-klassen generiere ich zusätzlich im dem aufrufenden programm in dem ich die basisklasse instantiiere (es ist kein main, das ganze ist eine .dll) und übergebe diese instanzen auch an den konstruktor der basisklasse (und dann weiter an den konstruktor der memberklassen).

    BioZyl::BioZyl(int NoEV, const Matrix& MatMatrix, const Matrix& BoundMatrix, double aBT, double mSweat, Vektor Temp)
    { ...
    
        mat.MAlloc(MatMatrix);
        EW.VAlloc(ew);
    ...
    }
    

    soweit, so gut. das programm läuft, aber wenn die destruktoren der memberklassen aufgerufen werden wird bei einem dieser destruktoren die oben genannte meldung ausgeworfen, und zwar genau dann wenn delete[]z aufgerufen wird.

    Vektor::~Vektor(void)
    {
        if (this->z != NULL)
        {
    	delete[]z; z=NULL;
        }
    

    ich habe dann z überprüft und festgestellt, dass es nicht auf NULL zeigt sondern auf irgendeinen bereich, die inhalte des 0. elements und der darauf folgenden sind nonsens...

    konnte mir einer folgen? hat jemand ne idee? bitte kein hohn hinsichtlich mangelnder eleganz... und nein, ich wollte "vector" nicht verwenden...



  • Hallo,

    Hat deine Vektorklasse einen Copykonstruktor und einen Zuweisungsoperator? Die wären hier notwendig.



  • das ding hat sich erledigt... ich hatte tatsächlich an einer stelle vergessen einem vektor speicherplatz zu geben, asche auf mein haupt!


Anmelden zum Antworten