<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[BLOCK_TYPE_IS_VALID]]></title><description><![CDATA[<p>ich weiß, dieses thema ist schon häufiger behandelt worden, dennoch, ich komme nicht drauf...</p>
<p>ich versuche es zu erläutern:<br />
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.:</p>
<pre><code class="language-cpp">class Vektor
{

public:
	double *z;
	int size;

	Vektor(int s, double wert);
         ...
}
</code></pre>
<p>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.</p>
<pre><code class="language-cpp">Vektor::Vektor(void)
{
	this-&gt;z =  new double[1];
}
</code></pre>
<p>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:</p>
<pre><code class="language-cpp">Vektor::VAlloc(int s)
{	
	this-&gt;size = s;

	if (this-&gt;z)
	{
		delete[]this-&gt;z;
		this-&gt;z = NULL;
	}

	this-&gt;z = new double[size];

	for (int i=0; i&lt;s; i++)
		this-&gt;z[i] = 0;

}
</code></pre>
<p>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).</p>
<pre><code class="language-cpp">BioZyl::BioZyl(int NoEV, const Matrix&amp; MatMatrix, const Matrix&amp; BoundMatrix, double aBT, double mSweat, Vektor Temp)
{ ...

    mat.MAlloc(MatMatrix);
    EW.VAlloc(ew);
...
}
</code></pre>
<p>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.</p>
<pre><code class="language-cpp">Vektor::~Vektor(void)
{
    if (this-&gt;z != NULL)
    {
	delete[]z; z=NULL;
    }
</code></pre>
<p>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...</p>
<p>konnte mir einer folgen? hat jemand ne idee? bitte kein hohn hinsichtlich mangelnder eleganz... und nein, ich wollte &quot;vector&quot; nicht verwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219194/block_type_is_valid</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 08:47:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219194.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Jul 2008 15:28:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to BLOCK_TYPE_IS_VALID on Wed, 30 Jul 2008 15:28:27 GMT]]></title><description><![CDATA[<p>ich weiß, dieses thema ist schon häufiger behandelt worden, dennoch, ich komme nicht drauf...</p>
<p>ich versuche es zu erläutern:<br />
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.:</p>
<pre><code class="language-cpp">class Vektor
{

public:
	double *z;
	int size;

	Vektor(int s, double wert);
         ...
}
</code></pre>
<p>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.</p>
<pre><code class="language-cpp">Vektor::Vektor(void)
{
	this-&gt;z =  new double[1];
}
</code></pre>
<p>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:</p>
<pre><code class="language-cpp">Vektor::VAlloc(int s)
{	
	this-&gt;size = s;

	if (this-&gt;z)
	{
		delete[]this-&gt;z;
		this-&gt;z = NULL;
	}

	this-&gt;z = new double[size];

	for (int i=0; i&lt;s; i++)
		this-&gt;z[i] = 0;

}
</code></pre>
<p>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).</p>
<pre><code class="language-cpp">BioZyl::BioZyl(int NoEV, const Matrix&amp; MatMatrix, const Matrix&amp; BoundMatrix, double aBT, double mSweat, Vektor Temp)
{ ...

    mat.MAlloc(MatMatrix);
    EW.VAlloc(ew);
...
}
</code></pre>
<p>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.</p>
<pre><code class="language-cpp">Vektor::~Vektor(void)
{
    if (this-&gt;z != NULL)
    {
	delete[]z; z=NULL;
    }
</code></pre>
<p>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...</p>
<p>konnte mir einer folgen? hat jemand ne idee? bitte kein hohn hinsichtlich mangelnder eleganz... und nein, ich wollte &quot;vector&quot; nicht verwenden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556486</guid><dc:creator><![CDATA[DumbDwarf]]></dc:creator><pubDate>Wed, 30 Jul 2008 15:28:27 GMT</pubDate></item><item><title><![CDATA[Reply to BLOCK_TYPE_IS_VALID on Wed, 30 Jul 2008 16:38:50 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Hat deine Vektorklasse einen Copykonstruktor und einen Zuweisungsoperator? Die wären hier notwendig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556529</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 30 Jul 2008 16:38:50 GMT</pubDate></item><item><title><![CDATA[Reply to BLOCK_TYPE_IS_VALID on Thu, 31 Jul 2008 06:45:49 GMT]]></title><description><![CDATA[<p>das ding hat sich erledigt... ich hatte tatsächlich an einer stelle vergessen einem vektor speicherplatz zu geben, asche auf mein haupt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556771</guid><dc:creator><![CDATA[DumbDwarf]]></dc:creator><pubDate>Thu, 31 Jul 2008 06:45:49 GMT</pubDate></item></channel></rss>