<?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[Absturz bei Vector]]></title><description><![CDATA[<p>Hallo, ich versuch's ganz kurz zu halten. Wahrscheinlich mach ich irgendeinen sehr dummen Fehler :(!</p>
<p>Ich habe einen vector</p>
<pre><code class="language-cpp">vector&lt;KlasseA&gt; vecA
</code></pre>
<p>Das ist Klasse A:</p>
<pre><code class="language-cpp">class A
{
public
vector&lt;KlasseB*&gt; vec;
//[...]
};
</code></pre>
<p>Klasse A besitzt also einen Vektor mit Zeigern auf Klasse B:</p>
<pre><code class="language-cpp">class B
{
public
double wert1;
int wert2;
//[...]
};
</code></pre>
<p>Jetzt bekomme ich von irgendwoher einen Vector mit Zeigern von Klasse B geliefert.<br />
Diesen gehe ich schrittweise durch und mache folgendes</p>
<pre><code class="language-cpp">vector&lt;KlasseA&gt; vecA;

for(int i=0; i&lt;B_Vector.size(); ++i)
{
	A objA;
	B *pTmp = new B();

	/* Kopie von B erzeugen: Die folgenden Werte kann  ich mir auch ausgeben lassen,
	 * es existieren definitiv die entsprechenden Objekte von B in dem Vektor B_Vector
	 */
	pTmp-&gt;wert1 = B_Vector[i]-&gt;wert1;  
	pTmp-&gt;wert2 = B_Vector[i]-&gt;wert2;
	objA.vec.push_back( pTmp );  // Lass ich diese Zeile weg, erfolgt bei &quot;vecA.push_back(objA);&quot; kein Absturz mehr (in dieser Zeile stürzt das Programm nicht ab)

	vecA.push_back(objA); // Absturz nach ein paar Schleifendurchgängen
}
</code></pre>
<p>Darf ich in der Forschleife keine lokalen Instanzen von A anlegen? Oder geht bei den Pointern was durcheinander?</p>
<p>Wäre toll wenn mir da eben ein profi helfen könnte <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/249946/absturz-bei-vector</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 06:52:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/249946.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Sep 2009 12:39:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Absturz bei Vector on Mon, 14 Sep 2009 12:39:27 GMT]]></title><description><![CDATA[<p>Hallo, ich versuch's ganz kurz zu halten. Wahrscheinlich mach ich irgendeinen sehr dummen Fehler :(!</p>
<p>Ich habe einen vector</p>
<pre><code class="language-cpp">vector&lt;KlasseA&gt; vecA
</code></pre>
<p>Das ist Klasse A:</p>
<pre><code class="language-cpp">class A
{
public
vector&lt;KlasseB*&gt; vec;
//[...]
};
</code></pre>
<p>Klasse A besitzt also einen Vektor mit Zeigern auf Klasse B:</p>
<pre><code class="language-cpp">class B
{
public
double wert1;
int wert2;
//[...]
};
</code></pre>
<p>Jetzt bekomme ich von irgendwoher einen Vector mit Zeigern von Klasse B geliefert.<br />
Diesen gehe ich schrittweise durch und mache folgendes</p>
<pre><code class="language-cpp">vector&lt;KlasseA&gt; vecA;

for(int i=0; i&lt;B_Vector.size(); ++i)
{
	A objA;
	B *pTmp = new B();

	/* Kopie von B erzeugen: Die folgenden Werte kann  ich mir auch ausgeben lassen,
	 * es existieren definitiv die entsprechenden Objekte von B in dem Vektor B_Vector
	 */
	pTmp-&gt;wert1 = B_Vector[i]-&gt;wert1;  
	pTmp-&gt;wert2 = B_Vector[i]-&gt;wert2;
	objA.vec.push_back( pTmp );  // Lass ich diese Zeile weg, erfolgt bei &quot;vecA.push_back(objA);&quot; kein Absturz mehr (in dieser Zeile stürzt das Programm nicht ab)

	vecA.push_back(objA); // Absturz nach ein paar Schleifendurchgängen
}
</code></pre>
<p>Darf ich in der Forschleife keine lokalen Instanzen von A anlegen? Oder geht bei den Pointern was durcheinander?</p>
<p>Wäre toll wenn mir da eben ein profi helfen könnte <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/1778188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778188</guid><dc:creator><![CDATA[Average]]></dc:creator><pubDate>Mon, 14 Sep 2009 12:39:27 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Vector on Mon, 14 Sep 2009 12:43:01 GMT]]></title><description><![CDATA[<p>Hast du mal versucht, die Instanzen von A auf dem Heap anzulegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1778190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778190</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Mon, 14 Sep 2009 12:43:01 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Vector on Mon, 14 Sep 2009 12:44:59 GMT]]></title><description><![CDATA[<p>1. Brauchst du wirklich Zeiger innerhalb des Containers (zum Beispiel weil du Polymorphie nutzt)? Wenn du nämlich von Zeigern wegkommen kannst, hast du schon sehr viele mögliche Fehlerquellen beseitigt - z.B. Memory Leaks, doppelte <code>delete</code> s auf den gleichen Speicherbereich, Dangling Pointers, ...</p>
<p>2. Falls du Zeiger brauchst, kopiere die Instanzen doch über den Kopierkonstruktor.</p>
<pre><code class="language-cpp">B* ZeigerAufKopie = new B(Original);
</code></pre>
<p>3. Was willst du genau erreichen? Einen Container kopieren? Das ginge ebenfalls viel einfacher, wenn nur Instanzen statt Zeigern gespeichert würden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1778191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778191</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 14 Sep 2009 12:44:59 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Vector on Mon, 14 Sep 2009 12:50:55 GMT]]></title><description><![CDATA[<blockquote>
<p>3. Was willst du genau erreichen? Einen Container kopieren? Das ginge ebenfalls viel einfacher, wenn nur Instanzen statt Zeigern gespeichert würden.</p>
</blockquote>
<p>Den VektorB bekomme ich zugespielt. ich brauche diese Objekte später selbst, will sie deshalb kopieren (sonst werden sie evtl. von jemand anderem aus diesem Vektor gelöscht).</p>
<p>Ist denn so auf dem ersten Blick kein Fehler zu erkennen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1778197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778197</guid><dc:creator><![CDATA[Average]]></dc:creator><pubDate>Mon, 14 Sep 2009 12:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Vector on Mon, 14 Sep 2009 12:57:31 GMT]]></title><description><![CDATA[<p>Ah ok, botschaft angekommen. Ich ersetze gerade mal die Zeiger auf B durch Instanzen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1778202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778202</guid><dc:creator><![CDATA[Average]]></dc:creator><pubDate>Mon, 14 Sep 2009 12:57:31 GMT</pubDate></item><item><title><![CDATA[Reply to Absturz bei Vector on Mon, 14 Sep 2009 13:01:55 GMT]]></title><description><![CDATA[<p>Kopie eines Containers mit Instanzen:</p>
<pre><code class="language-cpp">std::vector&lt;B&gt; Original;     // irgendein gefüllter Container
std::vector&lt;B&gt; Kopie = Original;  // und alles ist erledigt
</code></pre>
<p>Einfach, oder? <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/1778206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1778206</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 14 Sep 2009 13:01:55 GMT</pubDate></item></channel></rss>