<?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[Invalid Pointer]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe da ein kleine Problem mit meinem Programm.<br />
Ich bekomme bei zweiten Aufruf von delete immer</p>
<blockquote>
<p>&quot;Invalid Pointer: =0x0....&quot;</p>
</blockquote>
<p>Leider kann ich nicht nachvollziehen warum das so ist.</p>
<p>In folgendem Code tritt der Fehler auf:</p>
<pre><code class="language-cpp">bool TransversalList2::addTransversal(Transversal transversal)
{
	counter++;
	int *temp = list;

	list = new int[counter*this-&gt;size];

	if(list == NULL)
		return false;

	for(int i = 0; i&lt;counter-1; i++)
	{
		if(!this-&gt;copyTransversal(i,temp))
			return false;
	}

	this-&gt;copyTransversal(transversal);

	delete [] temp;

	return true;
}
</code></pre>
<p>zum Verständniss:</p>
<pre><code>int *list; // wird in der Methode addTransversal immer wieder erweitert
 int *temp; // wir benutzt damit beim erweitern von list die Daten nicht verloren gehen
</code></pre>
<p>Beim ersten Duchlauf ist</p>
<pre><code>temp == NULL
</code></pre>
<p>, da noch kein Eintrag in list exitiert.<br />
Beim zweiten Durchlauf sind Einträge in list drin.<br />
Wenn jetzt unten das</p>
<pre><code>delete [] temp
</code></pre>
<p>aufgerufen wird, dann bekomme ich die Fehlermeldung</p>
<blockquote>
<p>Invalid Pointer: 0x0...</p>
</blockquote>
<p>Ich habe keine Idee warum dem so ist.<br />
Hoffentlich kann mir jemand weiterhelfen.</p>
<p>CU<br />
Martin</p>
<p>PS: Nachfolgend die überladene Methode</p>
<blockquote>
<p>copyTransversal()</p>
</blockquote>
<p>, für den Fall das der Fehler sich dort befindet.</p>
<pre><code class="language-cpp">void TransversalList2::copyTransversal(Transversal transversal)
{
	int *cells = transversal.getCells();

	for(int i=0;i&lt;this-&gt;size;i++)
		list[counter-1*this-&gt;size+i] = cells[i];
}

bool TransversalList2::copyTransversal(int pos, int *temp)
{
	for(int i=0;i&lt;this-&gt;size;i++)
		list[pos*this-&gt;size+i] = temp[pos*this-&gt;size+i];

        return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/119114/invalid-pointer</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 19:10:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/119114.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Aug 2005 09:13:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Invalid Pointer on Sun, 28 Aug 2005 09:33:20 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich habe da ein kleine Problem mit meinem Programm.<br />
Ich bekomme bei zweiten Aufruf von delete immer</p>
<blockquote>
<p>&quot;Invalid Pointer: =0x0....&quot;</p>
</blockquote>
<p>Leider kann ich nicht nachvollziehen warum das so ist.</p>
<p>In folgendem Code tritt der Fehler auf:</p>
<pre><code class="language-cpp">bool TransversalList2::addTransversal(Transversal transversal)
{
	counter++;
	int *temp = list;

	list = new int[counter*this-&gt;size];

	if(list == NULL)
		return false;

	for(int i = 0; i&lt;counter-1; i++)
	{
		if(!this-&gt;copyTransversal(i,temp))
			return false;
	}

	this-&gt;copyTransversal(transversal);

	delete [] temp;

	return true;
}
</code></pre>
<p>zum Verständniss:</p>
<pre><code>int *list; // wird in der Methode addTransversal immer wieder erweitert
 int *temp; // wir benutzt damit beim erweitern von list die Daten nicht verloren gehen
</code></pre>
<p>Beim ersten Duchlauf ist</p>
<pre><code>temp == NULL
</code></pre>
<p>, da noch kein Eintrag in list exitiert.<br />
Beim zweiten Durchlauf sind Einträge in list drin.<br />
Wenn jetzt unten das</p>
<pre><code>delete [] temp
</code></pre>
<p>aufgerufen wird, dann bekomme ich die Fehlermeldung</p>
<blockquote>
<p>Invalid Pointer: 0x0...</p>
</blockquote>
<p>Ich habe keine Idee warum dem so ist.<br />
Hoffentlich kann mir jemand weiterhelfen.</p>
<p>CU<br />
Martin</p>
<p>PS: Nachfolgend die überladene Methode</p>
<blockquote>
<p>copyTransversal()</p>
</blockquote>
<p>, für den Fall das der Fehler sich dort befindet.</p>
<pre><code class="language-cpp">void TransversalList2::copyTransversal(Transversal transversal)
{
	int *cells = transversal.getCells();

	for(int i=0;i&lt;this-&gt;size;i++)
		list[counter-1*this-&gt;size+i] = cells[i];
}

bool TransversalList2::copyTransversal(int pos, int *temp)
{
	for(int i=0;i&lt;this-&gt;size;i++)
		list[pos*this-&gt;size+i] = temp[pos*this-&gt;size+i];

        return true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/859944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859944</guid><dc:creator><![CDATA[LE_Shatai]]></dc:creator><pubDate>Sun, 28 Aug 2005 09:33:20 GMT</pubDate></item><item><title><![CDATA[Reply to Invalid Pointer on Sun, 28 Aug 2005 09:31:55 GMT]]></title><description><![CDATA[<p>Was macht copyTransversal?<br />
Warum benutzt du nicht std::vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859948</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 28 Aug 2005 09:31:55 GMT</pubDate></item><item><title><![CDATA[Reply to Invalid Pointer on Sun, 28 Aug 2005 09:36:21 GMT]]></title><description><![CDATA[<p>Ich habe den Code für die Methode copyTransversal() angehangen, der bringt hoffentlich etwas Licht in die Sahe. <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>
<p>Nun ich nehm nicht std:vector, da ich nicht wußte das die sowas macht, ausserdem wollte ich mein Array möglichst speicherschonend aufbauen, so das ich es halt selbst gemacht habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859949</guid><dc:creator><![CDATA[LE_Shatai]]></dc:creator><pubDate>Sun, 28 Aug 2005 09:36:21 GMT</pubDate></item><item><title><![CDATA[Reply to Invalid Pointer on Sun, 28 Aug 2005 10:14:33 GMT]]></title><description><![CDATA[<p>Der Fehler liegt in der Klammerung in der Routine copyTransversal</p>
<pre><code class="language-cpp">void TransversalList2::copyTransversal(Transversal transversal)
{
    int *cells = transversal.getCells();

    for(int i=0;i&lt;this-&gt;size;i++)
        list[ (counter-1) *this-&gt;size+i] = cells[i];
           // ^         ^
}
</code></pre>
<p>BTW, die ganze bool Rückgaberei finde ich (zumindest) in realen Projekten nervig. Dein copyTransversal gibt nur true zurück, die Prüfung ist überflüssig. Du würdest ein Speicherleck produzieren (weil das delete nicht aufgerufen wird), wenn es doch false liefert. Müsste ich einen Fehler in dieser Routine suchen, würde ich zuerst über das return beim copyTransversal stolpern und damit Zeit verplempern.<br />
Genauso wird new niemals NULL zurückliefern (es sei denn Du übersetzt ohne exceptions). Damit würde addTransversal auch niemals false liefern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859960</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859960</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Sun, 28 Aug 2005 10:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to Invalid Pointer on Sun, 28 Aug 2005 10:18:48 GMT]]></title><description><![CDATA[<p>Keine Ahnung was du da machst. Mir kommt aber deine indizierung etwas komisch vor.<br />
zb.</p>
<pre><code class="language-cpp">void TransversalList2::copyTransversal(Transversal transversal)
{
    int *cells = transversal.getCells();

    for(int i=0;i&lt;this-&gt;size;i++)
        list[counter-1*this-&gt;size+i] = cells[i];
}
</code></pre>
<p>Bist du sicher das da keine klammern fehlen ?<br />
Du berechnest:</p>
<pre><code class="language-cpp">list[counter - (1*this-&gt;size) + i] = cells[i];
</code></pre>
<p>Kurt<br />
Edit: war etwas langsam</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859962</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Sun, 28 Aug 2005 10:18:48 GMT</pubDate></item><item><title><![CDATA[Reply to Invalid Pointer on Sun, 28 Aug 2005 10:18:52 GMT]]></title><description><![CDATA[<p>LE_Shatai schrieb:</p>
<blockquote>
<p>Ich habe den Code für die Methode copyTransversal() angehangen, der bringt hoffentlich etwas Licht in die Sahe. <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>
</blockquote>
<p>Das hier ist ziemlich seltsam:</p>
<pre><code class="language-cpp">list[counter-1*this-&gt;size+i]
</code></pre>
<p>Warum eins mal? Oder hast du vergessen, dass Punktrechnung vor Strichrechnung geht?</p>
<p>Das Problem liegt vermutlich darin, dass du irgendwo mit einem ungültigen Index auf ein Array zugreifst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859963</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 28 Aug 2005 10:18:52 GMT</pubDate></item><item><title><![CDATA[Reply to Invalid Pointer on Sun, 28 Aug 2005 10:59:11 GMT]]></title><description><![CDATA[<p>Ok, Problem gelöst.</p>
<blockquote>
<p>Dein copyTransversal gibt nur true zurück[...]</p>
</blockquote>
<p>Das war ein Copy'n'Paste Fehler. Ich hab es korrigiert.<br />
Ich hatte vorher über <strong>malloc</strong> Speicher angefordert, und ich hatte geprüft ob das auch geklappt hat.<br />
Da ich dann aber dasa ganze umgestellt hatte, ist das <strong>bool</strong> hinfällig geworden, hatte es aber vergessen rauszunehmen.<br />
Dennoch tnx für den Hinweis.</p>
<blockquote>
<p>Oder hast du vergessen, dass Punktrechnung vor Strichrechnung geht?</p>
</blockquote>
<p>Ja, diese Stelle hatte ich beim umschreiben übersehen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":-/"
      alt="😕"
    /><br />
Da lag auch der Fehler.</p>
<blockquote>
<p>Keine Ahnung was du da machst. Mir kommt aber deine indizierung etwas komisch vor.</p>
</blockquote>
<p>*g* Ich kann verstehen, das das ganze komisch aussieht.<br />
Diese Indizierung ist die Abbildung eines 2-dimensionalen Arrays auf ein 1-dimensionales.<br />
Nachzulesen ist hier: <a href="http://www.softgames.de/developia/viewarticle.php?cid=19547" rel="nofollow">http://www.softgames.de/developia/viewarticle.php?cid=19547</a></p>
<p>Nochmals danke an alle. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
<p>CU<br />
Martin</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859982</guid><dc:creator><![CDATA[LE_Shatai]]></dc:creator><pubDate>Sun, 28 Aug 2005 10:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to Invalid Pointer on Sun, 28 Aug 2005 16:51:08 GMT]]></title><description><![CDATA[<p>btw:</p>
<p>Lass</p>
<pre><code class="language-cpp">if(list == NULL)
		return false;
</code></pre>
<p>weg. new gibt niemals einen Nullzeiger zurück. Wenn du das willst, solltest du dir new(std::nothrow) anschaun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860187</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sun, 28 Aug 2005 16:51:08 GMT</pubDate></item></channel></rss>