<?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[anscheinend Gültigkeitsprobleme]]></title><description><![CDATA[<p>Hi,<br />
ich habe da ein Problem das mich ziemlich laust:<br />
Ich implementiere eine Klasse und allokiere dann innerhalb einer Methode Speicher, den Zeiger darauf gebe ich einer Klassenvariable. Diesen Speicher kann ich auch noch problemlos in einer anderen Methode freigeben, versuche ich das aber im Destruktor wird beim Debuggen ein benutzerdefinierter Haltepunkt in der delete Funktion aufgerufen, beim normalen Ausführen kommt es zum Programmabsturz. Ich denke mir mal, dass der Speicher seine Gültigkeit außerhalb einer Methode verliert, aber eigentlich kann das auch nicht so richtig sein. Vielleicht weiß ja jemand eine Lösung, ansonsten poste ich gerne auch noch Beispielcode.<br />
MfG dielösung</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/126804/anscheinend-gültigkeitsprobleme</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 22:08:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/126804.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Nov 2005 17:21:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to anscheinend Gültigkeitsprobleme on Fri, 18 Nov 2005 17:21:18 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe da ein Problem das mich ziemlich laust:<br />
Ich implementiere eine Klasse und allokiere dann innerhalb einer Methode Speicher, den Zeiger darauf gebe ich einer Klassenvariable. Diesen Speicher kann ich auch noch problemlos in einer anderen Methode freigeben, versuche ich das aber im Destruktor wird beim Debuggen ein benutzerdefinierter Haltepunkt in der delete Funktion aufgerufen, beim normalen Ausführen kommt es zum Programmabsturz. Ich denke mir mal, dass der Speicher seine Gültigkeit außerhalb einer Methode verliert, aber eigentlich kann das auch nicht so richtig sein. Vielleicht weiß ja jemand eine Lösung, ansonsten poste ich gerne auch noch Beispielcode.<br />
MfG dielösung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/920838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/920838</guid><dc:creator><![CDATA[dielösung]]></dc:creator><pubDate>Fri, 18 Nov 2005 17:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to anscheinend Gültigkeitsprobleme on Fri, 18 Nov 2005 18:03:59 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Sofern du die Adresse auf den Beginn des dynamisch allokierten Speichers korrekt sicherst, geht dieser nicht beim Verlassen der Methode verloren...</p>
<p>Beispiel: Hier ist der Speicher unabhängig von den Methoden verfügbar.</p>
<pre><code class="language-cpp">class foo
{
   int *p;

   public:
      foo() : p(0) {}
      ~foo() { delete[] p; }
      void alloc(size_t n) { if(n &amp;&amp; !p) p = new int[n]; }
      void free() { delete[] p; p = 0; }

};
</code></pre>
<p>dielösung schrieb:</p>
<blockquote>
<p>ansonsten poste ich gerne auch noch Beispielcode.</p>
</blockquote>
<p>Das wäre das beste :).</p>
<p>/edit: mal sehen, wann dieser edit erscheint... *mit dem Server kämpf*</p>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/920851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/920851</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Fri, 18 Nov 2005 18:03:59 GMT</pubDate></item><item><title><![CDATA[Reply to anscheinend Gültigkeitsprobleme on Fri, 18 Nov 2005 18:04:36 GMT]]></title><description><![CDATA[<p>der Fehler scheint in einer Art &quot;entwertung&quot; des Codes zu liegen, denn ich habe einfach nur nochmal das Prinzip von deinem Beispiel nachgebaut, da lief alles. Ich bin mir sicher, dass der Fehler in diesem Stück Code liegt:</p>
<pre><code class="language-cpp">/* Variablen */
	int		offset		= 0;
	int		padWidth	= 0;
	int		byteWidth	= 0;
	int		lWidth		= m_bmih.biWidth;
	int		lHeight		= m_bmih.biHeight;
	BYTE*	pTmpBits	= NULL;

	byteWidth = padWidth	= (int)((float)m_bmih.biWidth * (float)m_bmih.biBitCount/8.0f);

	/* Feststellen von Padding */
	while (padWidth%4 != 0)
		padWidth++;

	/* Zur Verfügungstellen einer zweiten Speichereinheit */
	pTmpBits	= m_pBits;
	m_pBits		= new BYTE[abs( lHeight ) * byteWidth];

	/* Formatieren */
	if (lHeight &lt; 0) // normale Zeilenfolge
	{

		lWidth	*= -1;
		offset	=	0;

		while (offset &lt; lWidth)
		{

			memcpy( (m_pBits + (offset * byteWidth)),
					(pTmpBits + (offset * padWidth)),
					byteWidth );

			offset++;

		} // while

	} // if
	else // umgekehrte Zeilenfolge
	{

		if (m_bmih.biBitCount == 24) // 24-Bit-Bitmap // Diesen Steuerelementpfad teste ich grade
		{

			int j	= m_size - 3;
			offset	= padWidth - byteWidth;

			for (int i = 0; i &lt; m_size; i+=3)
			{

				if ((i + 1)%padWidth == 0)
					i += offset;

				*(m_pBits+j+2)	= *(pTmpBits+i);
				*(m_pBits+j+1)	= *(pTmpBits+i+1);
				*(m_pBits+j)	= *(pTmpBits+i+2);

				j-=3;

			} // for

		} // if
		else // 32-Bit-Bitmap
		{

			int j = m_size - 4;

			for (int i = 0; i &lt; m_size; i+=4)
			{	

				*(m_pBits+j+3)	= *(pTmpBits+i);
				*(m_pBits+j+2)	= *(pTmpBits+i+1);
				*(m_pBits+j+1)	= *(pTmpBits+i+2);
				*(m_pBits+j)	= *(pTmpBits+i+3);

				j-=4;

			} // for

		} // else

	} // else

	/* Speicherfreigabe */
	delete [] pTmpBits;

	return true;
</code></pre>
<p>und zwar bei der Übergabe des Speichers in dem markierten Steuerelementpfad. Ich habe übrigens die Eingangswerte alle im Debugger überprüft und sicher gegangen, dass die Methode mit den richtigen Werten arbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/920862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/920862</guid><dc:creator><![CDATA[dielösung]]></dc:creator><pubDate>Fri, 18 Nov 2005 18:04:36 GMT</pubDate></item><item><title><![CDATA[Reply to anscheinend Gültigkeitsprobleme on Fri, 18 Nov 2005 21:56:51 GMT]]></title><description><![CDATA[<p>dielösung schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if ((i + 1)%padWidth == 0)
                    i += offset;
</code></pre>
</blockquote>
<p>das scheint mir nicht richtig zu sein - das bricht nicht rechtzeitig ab, wenn ein padding von 2 oder 3 byte vorliegt. konsequenterweise überschreibst du dann den kontrollblock deines heapblocks teilweise. sonderlich elegant ist die schleife auch nicht - im grunde solltest du nur eine variable benötigen.</p>
<pre><code class="language-cpp">/* Feststellen von Padding */
    while (padWidth%4 != 0)
        padWidth++;
</code></pre>
<p>das ist jetzt schon das 3. mal dass ich so ein ding sehe - ein bisschen mathematik hilft hier weiter und führt zu:</p>
<pre><code class="language-cpp">padWidth = ( padWidth + 3 ) &amp; ~3;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/921055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/921055</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 18 Nov 2005 21:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to anscheinend Gültigkeitsprobleme on Sat, 19 Nov 2005 13:49:33 GMT]]></title><description><![CDATA[<p>thx,<br />
naja ich hab den code größtenteils aus dem netz, ich schätze mal, dass du deshalb sowas schon öfter gesehen hast. Hat sich wahrscheinlich gut verbreitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/921400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/921400</guid><dc:creator><![CDATA[dielösung]]></dc:creator><pubDate>Sat, 19 Nov 2005 13:49:33 GMT</pubDate></item><item><title><![CDATA[Reply to anscheinend Gültigkeitsprobleme on Sat, 19 Nov 2005 13:54:32 GMT]]></title><description><![CDATA[<p>Ach, kannst du mal den Rechenweg posten, mit dem du auf diese Vereinfachung gekommen bist? Ich seh bei sowas nämlich überhaupt nicht durch und kann mir auch nicht vorstellen wie man eine Gleichung mit Restdivision drin bearbeitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/921404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/921404</guid><dc:creator><![CDATA[dielösung]]></dc:creator><pubDate>Sat, 19 Nov 2005 13:54:32 GMT</pubDate></item></channel></rss>