<?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[Übung: Vector splice() - Heap beschädigt]]></title><description><![CDATA[<p>Ich lerne im Moment C++ mit dem Buch: C++ lernen und professionell anwenden.<br />
Im Kapitel über Speicherreservierung gibt es die Aufgabe, eine Funkion zu schreiben, die einen Vektor in einen anderen an einer bestimmten Position einfügt.<br />
Die Funktion an sich macht keine Probleme, jedoch gibt es einen Laufzeitfehler, sobald man auf den (in der Funktion dynamisch erzeugten) Ergebnis-Vektor zugreift.</p>
<p>Die Funktion:</p>
<pre><code>int* splice(int* vec1, short length1, int* vec2, short length2, short pos)
{
if(pos &lt; 0 || pos &gt; length1)  // Bei ungültiger Position abbrechen!
	return NULL;

int* hilf = new int[(length1 + length2)];  // int Vektor groß genug
for(int i = 0; i &lt; pos; i++)
{
	*(hilf + i) = *(vec1 + i);  // hilf = vec1 &lt;- bis pos
}
for(int i = pos; i &lt; (length2 + pos); i++)
{
	*(hilf + (pos + i)) = *(vec2 + i);  // hilf += vec2
}
for(int i = (pos + length2); i &lt; (length1 + length2); i++)
{
	*(hilf + (pos + length2 + i)) = *(vec1 + (pos + i));  // Rest
}
	return hilf;
}
</code></pre>
<p>Eine einfache Benutzung wie:</p>
<pre><code>vec3 = splice(vec1, 10, vec2, 5, 3);
if(vec3 == NULL)
{
	cout &lt;&lt; &quot;Ungueltige Position! Oder sonstwas...&quot; &lt;&lt; endl;
	cin.clear(); cin.sync(); cin.get();  // Nich sofort Konsole schließen...
	return 1;
}
for(int i = 0; i &lt; 15; i++)
{	
        cout &lt;&lt; vec3[i] &lt;&lt; tab;  // MÄP! Fehler :confused: ?
}
</code></pre>
<p>...Erzeugt folgenden Laufzeitfehler:</p>
<p>Unbehandelte Ausnahme bei 0x7740E753 (ntdll.dll) in splice.exe: 0xC0000374: Ein Heap wurde beschädigt (Parameter: 0x77444270)</p>
<p>Auch wenn es wahrscheinlich ein Anfängerfehler ist, möchte ich dennoch wissen, was ich falschgemacht habe, um es in Zukunft zu vermeiden.</p>
<p>MfG<br />
Sky <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/327675/übung-vector-splice-heap-beschädigt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 09 Jul 2026 13:32:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327675.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 26 Aug 2014 17:19:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Übung: Vector splice() - Heap beschädigt on Tue, 26 Aug 2014 17:19:53 GMT]]></title><description><![CDATA[<p>Ich lerne im Moment C++ mit dem Buch: C++ lernen und professionell anwenden.<br />
Im Kapitel über Speicherreservierung gibt es die Aufgabe, eine Funkion zu schreiben, die einen Vektor in einen anderen an einer bestimmten Position einfügt.<br />
Die Funktion an sich macht keine Probleme, jedoch gibt es einen Laufzeitfehler, sobald man auf den (in der Funktion dynamisch erzeugten) Ergebnis-Vektor zugreift.</p>
<p>Die Funktion:</p>
<pre><code>int* splice(int* vec1, short length1, int* vec2, short length2, short pos)
{
if(pos &lt; 0 || pos &gt; length1)  // Bei ungültiger Position abbrechen!
	return NULL;

int* hilf = new int[(length1 + length2)];  // int Vektor groß genug
for(int i = 0; i &lt; pos; i++)
{
	*(hilf + i) = *(vec1 + i);  // hilf = vec1 &lt;- bis pos
}
for(int i = pos; i &lt; (length2 + pos); i++)
{
	*(hilf + (pos + i)) = *(vec2 + i);  // hilf += vec2
}
for(int i = (pos + length2); i &lt; (length1 + length2); i++)
{
	*(hilf + (pos + length2 + i)) = *(vec1 + (pos + i));  // Rest
}
	return hilf;
}
</code></pre>
<p>Eine einfache Benutzung wie:</p>
<pre><code>vec3 = splice(vec1, 10, vec2, 5, 3);
if(vec3 == NULL)
{
	cout &lt;&lt; &quot;Ungueltige Position! Oder sonstwas...&quot; &lt;&lt; endl;
	cin.clear(); cin.sync(); cin.get();  // Nich sofort Konsole schließen...
	return 1;
}
for(int i = 0; i &lt; 15; i++)
{	
        cout &lt;&lt; vec3[i] &lt;&lt; tab;  // MÄP! Fehler :confused: ?
}
</code></pre>
<p>...Erzeugt folgenden Laufzeitfehler:</p>
<p>Unbehandelte Ausnahme bei 0x7740E753 (ntdll.dll) in splice.exe: 0xC0000374: Ein Heap wurde beschädigt (Parameter: 0x77444270)</p>
<p>Auch wenn es wahrscheinlich ein Anfängerfehler ist, möchte ich dennoch wissen, was ich falschgemacht habe, um es in Zukunft zu vermeiden.</p>
<p>MfG<br />
Sky <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2414995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2414995</guid><dc:creator><![CDATA[Skybuildhero]]></dc:creator><pubDate>Tue, 26 Aug 2014 17:19:53 GMT</pubDate></item><item><title><![CDATA[Reply to Übung: Vector splice() - Heap beschädigt on Tue, 26 Aug 2014 17:57:47 GMT]]></title><description><![CDATA[<p>Skybuildhero schrieb:</p>
<blockquote>
<pre><code>int* hilf = new int[(length1 + length2)];  // int Vektor groß genug
for(int i = 0; i &lt; pos; i++)
{
	*(hilf + i) = *(vec1 + i);  // hilf = vec1 &lt;- bis pos
}
for(int i = pos; i &lt; (length2 + pos); i++)
{
	*(hilf + (pos + i)) = *(vec2 + i);  // hilf += vec2
}
for(int i = (pos + length2); i &lt; (length1 + length2); i++)
{
	*(hilf + (pos + length2 + i)) = *(vec1 + (pos + i));  // Rest
}
</code></pre>
</blockquote>
<p>Deine Indices sind irgendwie nicht ganz ok.<br />
Z.B. in der zweiten Schleife:</p>
<pre><code>*(hilf + (pos + pos)) = *(vec2 + pos);
// bis
*(hilf + (pos + pos + length2 - 1)) = *(vec2 + pos + length2 - 1);
</code></pre>
<p>Also entweder einfach zwei Indicies verwenden oder richtig verrechnen <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/2415001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415001</guid><dc:creator><![CDATA[lagalopex]]></dc:creator><pubDate>Tue, 26 Aug 2014 17:57:47 GMT</pubDate></item><item><title><![CDATA[Reply to Übung: Vector splice() - Heap beschädigt on Tue, 26 Aug 2014 18:07:20 GMT]]></title><description><![CDATA[<p>Danke!<br />
Ich hab alles durchsucht aber das wohl in meiner Frustration nach dem stundenlangen Suchen übersehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> ...<br />
Ich wusste doch das es wieder so eine &quot;Kleinichkeit&quot; ist.<br />
Vielen Dank für die schnelle Antwort <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/2415006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415006</guid><dc:creator><![CDATA[Skybuildhero]]></dc:creator><pubDate>Tue, 26 Aug 2014 18:07:20 GMT</pubDate></item></channel></rss>