<?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[vector&amp;lt;&amp;gt;-element-pointer]]></title><description><![CDATA[<p>hi@all - ma wieder ein typisches stl-problem, vereinfacht dargestellt:</p>
<p>Ich hab 2 Arrays, dh. vector&lt;&gt;:<br />
A mit irgendwelchen Strukturen<br />
B mit Pointern auf Elemente von A</p>
<p>also:</p>
<pre><code class="language-cpp">vector&lt;  any_structures &gt; A;
vector&lt; *any_structures &gt; B;
A.push_back( any_structure() );
B.push_back( &amp;A[0] );
</code></pre>
<p>Nachdem ich A mit Kram und B (korrekt - is geprüft) mit Referenzen auf Elemente von A gefüllt habe, gebe ich später den Inhalt von A größtenteils nur noch über die B-Elemente aus. Genau dabei kommts zu Dereferzierungs-Fehlern, weil die pointer anscheinend nicht mehr auf die Elemente zeigen.<br />
Woran kann das liegen?</p>
<p>Momentan arbeite ich damit, die Indices der A-Elemente in B zu speichern, aber das hat ziemlich hässliche folgen, da die Arrays zweidimensional und deren namen nicht kurz sind, als Beispiel:</p>
<pre><code class="language-cpp">vData[ tData[row][col].v[i].y ][ tData[row][col].v[i].x ].n.c_vec()
</code></pre>
<p>vorher wars einfach:</p>
<pre><code class="language-cpp">tData[row][col].v[i]-&gt;n.c_vec()
</code></pre>
<p>Gibt es eine bessere Möglichkeit?<br />
evtl. iteratoren in B speichern oder so ?</p>
<p>Danke schon ma für die Mühe bis hierhin zu lesen ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/125418/vector-lt-gt-element-pointer</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 08:29:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/125418.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 06 Nov 2005 14:56:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector&amp;lt;&amp;gt;-element-pointer on Sun, 06 Nov 2005 14:56:20 GMT]]></title><description><![CDATA[<p>hi@all - ma wieder ein typisches stl-problem, vereinfacht dargestellt:</p>
<p>Ich hab 2 Arrays, dh. vector&lt;&gt;:<br />
A mit irgendwelchen Strukturen<br />
B mit Pointern auf Elemente von A</p>
<p>also:</p>
<pre><code class="language-cpp">vector&lt;  any_structures &gt; A;
vector&lt; *any_structures &gt; B;
A.push_back( any_structure() );
B.push_back( &amp;A[0] );
</code></pre>
<p>Nachdem ich A mit Kram und B (korrekt - is geprüft) mit Referenzen auf Elemente von A gefüllt habe, gebe ich später den Inhalt von A größtenteils nur noch über die B-Elemente aus. Genau dabei kommts zu Dereferzierungs-Fehlern, weil die pointer anscheinend nicht mehr auf die Elemente zeigen.<br />
Woran kann das liegen?</p>
<p>Momentan arbeite ich damit, die Indices der A-Elemente in B zu speichern, aber das hat ziemlich hässliche folgen, da die Arrays zweidimensional und deren namen nicht kurz sind, als Beispiel:</p>
<pre><code class="language-cpp">vData[ tData[row][col].v[i].y ][ tData[row][col].v[i].x ].n.c_vec()
</code></pre>
<p>vorher wars einfach:</p>
<pre><code class="language-cpp">tData[row][col].v[i]-&gt;n.c_vec()
</code></pre>
<p>Gibt es eine bessere Möglichkeit?<br />
evtl. iteratoren in B speichern oder so ?</p>
<p>Danke schon ma für die Mühe bis hierhin zu lesen ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/909567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/909567</guid><dc:creator><![CDATA[toast]]></dc:creator><pubDate>Sun, 06 Nov 2005 14:56:20 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;&amp;gt;-element-pointer on Sun, 06 Nov 2005 15:22:34 GMT]]></title><description><![CDATA[<p>toast schrieb:</p>
<blockquote>
<p>Genau dabei kommts zu Dereferzierungs-Fehlern, weil die pointer anscheinend nicht mehr auf die Elemente zeigen.<br />
Woran kann das liegen?</p>
</blockquote>
<p>Ein Iterator (oder allgemein Zeiger) auf ein Element eines sequentiellen Containers verliert seine Gültigkeit, wenn eine verändernde Operation auf den Container ausgeführt wurde. Heißt im Klartext: Sobald der Container verändert wurde, ist nicht mehr garantiert, dass dein Iterator noch auf die richtige Stelle zeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/909592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/909592</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 06 Nov 2005 15:22:34 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;&amp;gt;-element-pointer on Sun, 06 Nov 2005 15:57:06 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>toast schrieb:</p>
<blockquote>
<p>Genau dabei kommts zu Dereferzierungs-Fehlern, weil die pointer anscheinend nicht mehr auf die Elemente zeigen.<br />
Woran kann das liegen?</p>
</blockquote>
<p>Ein Iterator (oder allgemein Zeiger) auf ein Element eines sequentiellen Containers verliert seine Gültigkeit, wenn eine verändernde Operation auf den Container ausgeführt wurde. Heißt im Klartext: Sobald der Container verändert wurde, ist nicht mehr garantiert, dass dein Iterator noch auf die richtige Stelle zeigt.</p>
</blockquote>
<p>hm.., hab mich wahrscheinlich nicht klar ausgedrückt: nachdem einmal Elemente in A hinzugefügt wurden, wird nicht mehr der Container A (dh. die Anzahl dessen elemente), sondern nur noch deren Inhalt geändert. Danach (also nach dem Hinzufügen) wird das array B erzeugt und A nicht mehr verändert.<br />
Die Pointer zeigen aber trotzdem nicht mehr auf die Elemente.</p>
<p>kann es also sein, dass vector seine Elemente spontan wo anders speichert und so deren Adresse ändert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/909632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/909632</guid><dc:creator><![CDATA[toast]]></dc:creator><pubDate>Sun, 06 Nov 2005 15:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;&amp;gt;-element-pointer on Sun, 06 Nov 2005 17:11:52 GMT]]></title><description><![CDATA[<p>Würde ich schon sagen. Da du andere Elemente veränderst, d.h. idR auch in der Größe etc. , müssen diese an eine andere Speicherstelle geschrieben werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/909713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/909713</guid><dc:creator><![CDATA[Devas]]></dc:creator><pubDate>Sun, 06 Nov 2005 17:11:52 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;&amp;gt;-element-pointer on Mon, 07 Nov 2005 08:04:01 GMT]]></title><description><![CDATA[<p>Wenn du in einer Schleife (A.pus_back();B.push_back(&amp;A.last());) die Vektoren füllst, kann es schnell passieren, daß A zwischendurch mehr Speicher anfordert - und dabei werden auch die vorhandenen Elemente umkopiert.</p>
<p>Btw, wozu benötigst du A, wenn du dann doch nur mit den Pointern rechnest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/910263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/910263</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 07 Nov 2005 08:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to vector&amp;lt;&amp;gt;-element-pointer on Mon, 07 Nov 2005 23:14:42 GMT]]></title><description><![CDATA[<p>sry, dass ich nich geantwortet hatte, bisl stressig die Tage; Ansonsten weiß ich jetz wie ichs mache, also danke für die Hilfe!!</p>
<p>PS: Wieso ich das so mache? Würde jetz ziemlich weit führen, allerdings is A noch nötig, da mehrere Elemente von B auf die selben A-Elemente verweisen müssen. Das wird leider wegen meiner vereinfachten Darstellung nicht so richtig klar ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/911242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/911242</guid><dc:creator><![CDATA[toast]]></dc:creator><pubDate>Mon, 07 Nov 2005 23:14:42 GMT</pubDate></item></channel></rss>