<?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[Debug assertion failed... warum?]]></title><description><![CDATA[<p>hallo liebe coder,</p>
<p>hier mein code.<br />
die idee = eleminieren eines wertes bei knopfdruck. in dem array dann natürlich auch.</p>
<p>realisierung:</p>
<pre><code class="language-cpp">nt  CGraph::DelPoint ( int ipos )
{
	if ( ipos &gt; -1 )
	{
		// Überschreibe gewählte Position mit der jeweils Nächsten
		for ( ipos ; ipos &lt; m_nXY-1 ; ipos++ )
		{
			m_xy[ipos].x = m_xy[ipos+1].x;
			m_xy[ipos].y = m_xy[ipos+1].y;
		};

		// Aktualisiere die Anzahl der Plaetze im Speicher m_nXY 
                    (also einer weniger)
		m_nXY--;

		// Speicher mit einem Platz weniger buchen
		XY * xy = new XY [m_nXY -1];

		if(m_xy)
		{	// Kopiere den Inhalt ohne die letzte Leere Stelle
			memcpy ( xy, m_xy, m_nXY * sizeof(XY) );

			delete [] m_xy;
		}

		// Loeschen des alten Speichers
		m_xy = xy;

		// Setzte die letzte Position als die Groesste
		m_xMax = m_xy[m_nXY -1].x;
		m_yMax = m_xy[m_nXY -1].y;
	}
	else
	{
		return -1;
	};
	return ipos;
}
</code></pre>
<p>das macht er erst wenn ich das zweite mal etwas lösche,<br />
also wenn schonmal die methode durchlaufen ist.</p>
<p>ich lösche aber doch immer den alten speicher und das new XY ist doch auch<br />
nur solange gältig, wie die Methode selbst existiert... ?!??</p>
<p>danke für die schnelle hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/204319/debug-assertion-failed-warum</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 13:44:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/204319.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Feb 2008 15:31:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Debug assertion failed... warum? on Fri, 01 Feb 2008 15:31:54 GMT]]></title><description><![CDATA[<p>hallo liebe coder,</p>
<p>hier mein code.<br />
die idee = eleminieren eines wertes bei knopfdruck. in dem array dann natürlich auch.</p>
<p>realisierung:</p>
<pre><code class="language-cpp">nt  CGraph::DelPoint ( int ipos )
{
	if ( ipos &gt; -1 )
	{
		// Überschreibe gewählte Position mit der jeweils Nächsten
		for ( ipos ; ipos &lt; m_nXY-1 ; ipos++ )
		{
			m_xy[ipos].x = m_xy[ipos+1].x;
			m_xy[ipos].y = m_xy[ipos+1].y;
		};

		// Aktualisiere die Anzahl der Plaetze im Speicher m_nXY 
                    (also einer weniger)
		m_nXY--;

		// Speicher mit einem Platz weniger buchen
		XY * xy = new XY [m_nXY -1];

		if(m_xy)
		{	// Kopiere den Inhalt ohne die letzte Leere Stelle
			memcpy ( xy, m_xy, m_nXY * sizeof(XY) );

			delete [] m_xy;
		}

		// Loeschen des alten Speichers
		m_xy = xy;

		// Setzte die letzte Position als die Groesste
		m_xMax = m_xy[m_nXY -1].x;
		m_yMax = m_xy[m_nXY -1].y;
	}
	else
	{
		return -1;
	};
	return ipos;
}
</code></pre>
<p>das macht er erst wenn ich das zweite mal etwas lösche,<br />
also wenn schonmal die methode durchlaufen ist.</p>
<p>ich lösche aber doch immer den alten speicher und das new XY ist doch auch<br />
nur solange gältig, wie die Methode selbst existiert... ?!??</p>
<p>danke für die schnelle hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447663</guid><dc:creator><![CDATA[x-coder44]]></dc:creator><pubDate>Fri, 01 Feb 2008 15:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to Debug assertion failed... warum? on Fri, 01 Feb 2008 15:56:21 GMT]]></title><description><![CDATA[<p>Was ist XY?<br />
Besitzt XY virtuelle Funktionen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447675</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Fri, 01 Feb 2008 15:56:21 GMT</pubDate></item><item><title><![CDATA[Reply to Debug assertion failed... warum? on Fri, 01 Feb 2008 16:02:24 GMT]]></title><description><![CDATA[<p>nein...</p>
<p>XY ist eine Struktur...</p>
<pre><code class="language-cpp">typedef struct tagXY {
	double x;
	double y;
} XY;
</code></pre>
<p>belege ich neuen speicher...<br />
hast du ne ahnung warum das nicht funzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447678</guid><dc:creator><![CDATA[x-coder44]]></dc:creator><pubDate>Fri, 01 Feb 2008 16:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Debug assertion failed... warum? on Fri, 01 Feb 2008 16:07:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">delete [] m_xy;
m_xy = 0;
</code></pre>
<p>Sonst geht der Vergleich if (m_xy) { ... } nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447679</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Fri, 01 Feb 2008 16:07:55 GMT</pubDate></item><item><title><![CDATA[Reply to Debug assertion failed... warum? on Fri, 01 Feb 2008 16:13:46 GMT]]></title><description><![CDATA[<p>das ist ein netter hinweis, danke...</p>
<p>jedoch leider nicht die lösung...<br />
der meckert weiterhin über das</p>
<pre><code class="language-cpp">delete [] m_xy;
</code></pre>
<p>beim zweiten male löschen!</p>
<p>verstehe das echt nicht....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447682</guid><dc:creator><![CDATA[x-coder44]]></dc:creator><pubDate>Fri, 01 Feb 2008 16:13:46 GMT</pubDate></item><item><title><![CDATA[Reply to Debug assertion failed... warum? on Fri, 01 Feb 2008 16:48:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int  CGraph::DelPoint ( int ipos )
{
	if ( ipos &gt; -1 )
	{
		// Überschreibe gewählte Position mit der jeweils Nächsten
		for ( ipos ; ipos &lt; m_nXY-1 ; ipos++ )
		{
			m_xy[ipos].x = m_xy[ipos+1].x;
			m_xy[ipos].y = m_xy[ipos+1].y;
// du kannst auch die Strukturen direkt Zuweisen:
//                      m_xy[ipos] = m_xy[ipos+1];
// noch besser ist std::copy
		};

		// Aktualisiere die Anzahl der Plaetze im Speicher m_nXY 
                    (also einer weniger)
		m_nXY--;

		// Speicher mit einem Platz weniger buchen
		XY * xy = new XY [m_nXY -1];  // !!! wieso -1 ? damit resevierst du ein Element zuwenig (was dann beim memcpy zu undefiniertem Verhalten wird)

		if(m_xy)
// überflüssig, falls m_xy vorher NULL war, hattest du keine Elemente und konntest daher gar nichts löschen
// ein assert wäre angebracht
		{	// Kopiere den Inhalt ohne die letzte Leere Stelle
			             memcpy ( xy, m_xy, m_nXY * sizeof(XY) );
// keine Einwände, aber std::copy ist angebracht
// zudem kombiniert man das am Besten mit der vorherigen Kopie

			delete [] m_xy;
		}

		// Loeschen des alten Speichers
		m_xy = xy; // Eigentlich hat das Löschen schon beim delete[] stattgefunden, hier aktualisierst du nur die entsprechende Membervariable

		// Setzte die letzte Position als die Groesste
		m_xMax = m_xy[m_nXY -1].x;
		m_yMax = m_xy[m_nXY -1].y;
                // !!!! was wenn m_nXY 0 ist ?
	}
	else
	{
		return -1;
	};
	return ipos;
}
</code></pre>
<pre><code class="language-cpp">typedef struct tagXY {
    double x;
    double y;
} XY;
</code></pre>
<p>Das ist C-Style. In C++ gibt es keine Tag-Namen, und auch in C ist es nicht unbedingt üblich, einen anderen Bezeichner dafür zu verwenden. Besser also</p>
<pre><code class="language-cpp">struct XY { double x,y; };
</code></pre>
<p>mithin</p>
<pre><code class="language-cpp">int  CGraph::DelPoint ( int ipos )
{
    if ( ipos &lt; 0 )
        return -1;

    assert( ipos &lt; m_nXY );

    XY* new_xy = new XY[ --m_nXY ];
    std::copy( m_xy, m_xy + ipos, new_xy ); // alle Positionen vor ipos
    std::copy( m_xy + ipos + 1, m_xy + m_nXY + 1, new_xy + ipos );
    delete [] m_xy;
    m_xy = new_xy;

    // Setzte die letzte Position als die Groesste, bzw. 0 wenn das Array leer ist
    m_xMax = m_nXY ? m_xy[m_nXY -1].x : 0;
    m_yMax = m_nXY ? m_xy[m_nXY -1].y : 0;

    return ipos;
}
</code></pre>
<p>eigentlich sollte das sowieso einen vector benutzen, mit std::vector&lt;XY&gt; m_xy :</p>
<pre><code class="language-cpp">int  CGraph::DelPoint ( int ipos )
{
    if ( ipos &lt; 0 )
        return -1;

    assert( ipos &lt; m_xy.size() );

    m_xy.erase( m_xy.begin() + ipos );
    // ggf. std::vector&lt;XY&gt;(m_xy).swap(m_xy);

    m_xMax = m_nXY ? m_xy.back().x : 0;
    m_yMax = m_nXY ? m_xy.back().y : 0;

    return ipos;
}
</code></pre>
<p>kurz und schmerzlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447689</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 01 Feb 2008 16:48:12 GMT</pubDate></item><item><title><![CDATA[Reply to Debug assertion failed... warum? on Fri, 01 Feb 2008 16:47:17 GMT]]></title><description><![CDATA[<p>funktioniert super....<br />
vielen dank... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1447703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1447703</guid><dc:creator><![CDATA[x-coder44]]></dc:creator><pubDate>Fri, 01 Feb 2008 16:47:17 GMT</pubDate></item></channel></rss>